我正在尝试spring-data-r2dbc。我正在Postgresql上尝试这个。我以前尝试过spring data mongodb Responsive。我忍不住把两者都比较了一下。
我看到还不支持查询派生。但我想知道是否有@Tailable
的等价物。这样我就会实时收到数据库更改的通知。Ca任何人都可以共享与此相关的任何代码示例。
我理解底层数据库应该支持这一点。我相信Postgresql确实支持这种使用逻辑解码的方式(如果我在这里错了,请纠正我)。
spring-data-r2dbc中是否有@Tailable
等效项?
我也在同一个问题上,不确定您是否找到了解决方案,但我可以通过执行以下操作来完成类似的任务。首先,我在表中添加了触发器
CREATE TRIGGER trigger_name
AFTER INSERT OR DELETE OR UPDATE
ON table_name
FOR EACH ROW
EXECUTE PROCEDURE trigger_function_name;
这将在更新、删除或插入行时在表上设置触发器。然后它将调用我设置的触发函数,该函数如下所示:
CREATE FUNCTION trigger_function_name
RETURNS trigger
LANGUAGE 'plpgsql'
COST 100
VOLATILE NOT LEAKPROOF
AS
$BODY$
DECLARE
payload JSON;
BEGIN
payload = row_to_json(NEW);
PERFORM pg_notify('notification_name', payload::text);
RETURN NULL;
END;
$BODY$;
这将允许我“监听”来自我的Spring Boot项目的任何这些更新,它将作为有效负载发送整行。接下来,在我的Spring Boot项目中,我配置了与数据库的连接。
@Configuration
@EnableR2dbcRepositories("com.(point to wherever repository is)")
public class R2DBCConfig extends AbstractR2dbcConfiguration {
@Override
@Bean
public ConnectionFactory connectionFactory() {
return new PostgresqlConnectionFactory(PostgresqlConnectionConfiguration.builder()
.host("host")
.database("db")
.port(port)
.username("username")
.password("password")
.schema("schema")
.connectTimeout(Duration.ofMinutes(2))
.build());
}
}
有了它,我将它Autowire(依赖注入)放入我的服务类中的构造函数中,并将其强制转换为r2dbc PostgressqlConnection类,如下所示:
this.postgresqlConnection = Mono.from(connectionFactory.create()).cast(PostgresqlConnection.class).block();
现在我们想“监听”我们的表并在对我们的表执行某些更新时收到通知。为此,我们设置了一个初始化方法,该方法在依赖注入后使用@PostContruct注释执行
@PostConstruct
private void postConstruct() {
postgresqlConnection.createStatement("LISTEN notification_name").execute()
.flatMap(PostgresqlResult::getRowsUpdated).subscribe();
}
请注意,我们监听我们放在pg_notify方法中的任何名称。我们还想设置一个方法来在bean即将被丢弃时关闭连接,如下所示:
@PreDestroy
private void preDestroy() {
postgresqlConnection.close().subscribe();
}
现在,我只需创建一个方法,返回当前表中的任何内容的流量,并将其与通知合并,正如我在通知以json形式出现之前所说的,因此我必须对其进行反序列化,并决定使用ObjectMapper。所以,它看起来像这样:
private Flux<YourClass> getUpdatedRows() {
return postgresqlConnection.getNotifications().map(notification -> {
try {
//deserialize json
return objectMapper.readValue(notification.getParameter(), YourClass.class);
} catch (IOException e) {
//handle exception
}
});
}
public Flux<YourClass> getDocuments() {
return documentRepository.findAll().share().concatWith(getUpdatedRows());
}
希望这有帮助。干杯
这一章将介绍如何把Spring Data扩展到其他的框架中。接下来让我们看看如何将Spring Data整合到Spring MVC中。
Spring Data MongoDB 可以提供 Java 开发人员在使用 MongoDB 时的效率。它使用了熟悉的 Spring 概念,例如用于核心 API 的模块类,轻量级仓库风格的数据访问。 Spring Data MongoDB 项目提供了集成 MongoDB 文档数据库。Spring Data MongoDB 的核心功能区是一个 POJO 中心模型,用于与 MongoDB DBColle
我们有一个应用程序,它使用Spring数据JPA存储库注入EJB。springframework。数据jpa。存储库。cdi。JpaRepositoryExtension发挥了神奇的作用。 它在CDI中查找EntityManager,保存以备后用,使用注释查找Spring Data JPA存储库,并保存它们的类型以备后用。当CDI初始化时,运行并执行正确的bean创建和插入CDI。这在JBoss
顺便说一句:当我将名为“insert”的属性添加到Goal或从Goal中删除elasticsearch注释时,该错误就会消失。 GoalRepository是:
我知道有一个jackson kotlin模块,它包含在我的maven文件中。它用于反序列化我通过http获得的对象,所以我知道spring会接收它。然而,spring data mongodb似乎不使用jackson ObjectMapper? 有没有一种方法可以在spring data mongodb中使用jackson objectmapper,或者修复没有非args构造函数的问题?
我使用的是spring数据mongodb。 我想通过在查询中传递一些可选参数来查询数据库。 我有一个域类。 我的控制器: 这里Key和username是可选的查询参数。 如果我通过其中任何一个,它应该返回具有给定密钥或用户名的匹配文档。 我的服务方式是: 存储库: 但是通过使用上述查询,它不会返回具有给定密钥或用户名的文档。我的查询有什么问题? 这就是我提出请求的方式http://localhos