gpt4 book ai didi

java - R2DBC 数据库客户端未调用 doOnSuccess 或因嵌套调用而终止

转载 作者:行者123 更新时间:2023-12-01 22:04:58 24 4
gpt4 key购买 nike

代码正在到达“填充要执行的迁移”日志。然而 AAA、EEE 和 CCC 日志均未到达,因此 doOnSuccess 内没有代码正在运行。任何有关如何解决此问题的帮助将不胜感激。

databaseClient.execute().sql("CREATE TABLE IF NOT EXISTS " + TRACKING_TABLE +" ("+PROPERTY_SERVICE+ " varchar(255) NOT NULL, " + PROPERTY_VERSION+" float(4) NOT NULL, " +PROPERTY_SCRIPT+" varchar(255) NOT NULL);")
.then()
.concatWith(databaseClient.execute().sql("CREATE TABLE IF NOT EXISTS " + TRACKING_SEAL_TABLE+" ("+PROPERTY_SERVICE+ " varchar(255) NOT NULL, "+ PROPERTY_VERSION+" float(4) NOT NULL);")
.then())
.doOnComplete(() -> {
log.info("Populating migrations to be executed");// reaches here
databaseClient.select().from(TRACKING_SEAL_TABLE).as(MigrationSealDetails.class).fetch().all() .collectList()
.map()//mapping function
.doOnError(e -> log.log(Level.SEVERE, "EEE", e))
.doOnSuccess(highestSealPerService -> {
log.info("AAA");
databaseClient.select().from(TRACKING_TABLE).as(MigrationDetails.class).fetch().all()
.collectList()
.doOnSuccess(migrationsExecuted -> {
// other code
}).block();
}).block();
}).blockLast();
log.info("CCC");

最佳答案

log.info("CCC");

在任何情况下都应该调用它,因为它是所有反应式调用之后的最后一个操作。我认为你的代码陷入僵局的问题。您处于 doOnComplete 中的响应式(Reactive)线程中。然后,您进行另一个阻塞操作来阻塞当前的 react 线程,并且您会收到死锁,因为没有操作可以完成。

如果您编写 .block(),请不要使用 R2DBC,只需使用普通 JDBC。

关于java - R2DBC 数据库客户端未调用 doOnSuccess 或因嵌套调用而终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58697134/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com