簡體   English   中英

R2DBC 數據庫客戶端未調用 doOnSuccess 或終止嵌套調用

[英]R2DBC database client not calling doOnSuccess or terminating for nested calls

代碼到達“填充要執行的遷移”日志。 然而,沒有任何 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的反應線程中。 然后您進行另一個阻塞操作來阻塞當前的反應線程並且您收到死鎖,因為沒有操作可以完成。

如果您編寫.block() ,請不要使用 R2DBC,只需使用普通的 JDBC。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM