微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MySqlPool quarkus 反应式客户端不会自动关闭

如何解决MySqlPool quarkus 反应式客户端不会自动关闭

我使用 quarkus-narayana-jta 进行事务管理,并使用反应式 MysqLPool 插入数据库MysqLPool 类不是 Autoclosable 所以我们是否需要从 Pool 类中显式调用 close() 方法以在发生故障时关闭,或者只是将错误消息打印到日志并让事务管理器在发生故障时回滚整个事务是否可以.如果没有明确关闭 MysqLPool 会有什么影响。

@Transactional
public Uni<String> insertIntoDb(BaseLog baseLog) {

    LocalDate currentDate = LocalDate.Now();
    int year = currentDate.getYear();

    if (baseLog instanceof RequestLog) {
        prepareRequestLogData(baseLog,currentDate,year);
    }

    if (baseLog instanceof ResponseLog) {
        prepareResponseLogData(baseLog,year);
    }

    return MysqLPool.preparedQuery(query).execute().onItem()
            .transformToUni(id -> MysqLPool
                    .query("SELECT TRAN_ID FROM " + tableName + " ORDER BY TO_DB_TS DESC LIMIT 1").execute())
            .onItem().transform(rows -> rows.iterator().next().getString(0)).onFailure().invoke(f -> {
                LOG.error("Error while inserting data to " + tableName + " table::" + f.getMessage());
            });

}

解决方法

反应式 SQL 池未与 @Transactional 和传统的 TransactionManager(例如 Narayana)集成。

如果您使用反应式 SQL,您需要明确地打开/关闭连接,并明确地开始/结束事务。

如果您将 Hibernate Reactive 与 Panache 结合使用,则可以使用 @ReactiveTransactional

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。