当前位置: 首页 > 知识库问答 >
问题:

R2DBC数据库客户端未调用doOn成功或终止嵌套调用

徐高懿
2023-03-14

代码正在到达“填充要执行的迁移”日志。然而,没有一个AAA、EEE和CCC日志被访问,因此没有运行doOn成功中的任何代码。关于如何解决此问题的任何帮助将不胜感激。

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");

共有1个答案

堵飞鸿
2023-03-14

log.info(“CCC”);

在任何情况下都应该调用它,因为它是所有被动调用之后的最后一个操作。我认为你的代码死锁的问题。您正处于一个反应线程中。然后进行另一个阻塞操作,阻塞当前反应线程,并收到死锁,因为无法完成任何操作。

如果编写<代码>,请不要使用R2DBC。block()只需使用普通的JDBC。

 类似资料:
  • 在我的机器上,我发现Chrome中没有调用SignalR客户端函数。 在客户端代码中,我使用 我可以在Chrome的javascript控制台中看到与成功连接相对应的日志消息。为了参考,这些日志消息是 但是当调用客户端方法时,Chrome的javascript控制台不会记录消息。

  • 问题内容: 我有以下代码: 有什么方法可以在函数外部调用函数?我试过调用,但我认为它仅在父函数内部可见。 问题答案:

  • 我们可以通过调用expand来解决这个问题,如下所示:。在非嵌套的$expand场景中,我喜欢像这样的lambda支持。NET OData4客户机中是否有适当的方法调用嵌套展开,而不使用不幸的神奇字符串?如果没有,有没有像“customers/orders”这样更干净的字符串模式可以工作?谢了。

  • 客户端模块是一个较复杂的模块,这里包含了集群管理、路由、地址管理器、连接管理器、负载均衡器,还与代理、注册中心等模块交互。

  • 当应用程序处于活动状态时,所有操作都正常运行,但当没有任何活动运行时,我仍然通过firebase notification获得一个带有app_name和Body的通知,并打开MainActivity。 这是我的MyFirebaseMessagingService类:- 我看到了一个类似的问题,但对我的情况没有帮助。

  • 通过 Invoke 方法同步调用 Invoke(string, []reflect.Value, *InvokeSettings) ([]reflect.Value, error) Invoke 方法有三个输入参数,两个输出参数。 第一个输入参数是远程方法名。 第二个输入参数是远程方法参数。 第三个输入参数是远程调用设置。 第一个输出参数表示返回的结果。 第二个输出参数表示返回的错误。 因为使用该