java - MySqlPool quarkus 反应式客户端不会自动关闭
问题描述
我正在使用 quarkus-narayana-jta 进行事务管理,并使用反应式 MysqlPool 插入数据库。MysqlPool 类不是可自动关闭的,所以我们是否需要从 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, currentDate, 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
传统的事务管理器(如 Narayana)集成。
如果您使用 Reactive SQL,您需要显式打开/关闭连接,并显式开始/结束事务。
如果您将 Hibernate Reactive 与 Panache 一起使用,则可以使用@ReactiveTransactional
.
推荐阅读
- c++ - 将字符串变量分配给 unsigned char 变量
- scala - 与 CSV 之间的嵌套 Scala 案例类
- ios - 从应用程序向 ARKit 添加参考图像
- android - 从android中的动态链接获取实际的url
- .net - 从 Visual Studio Team Services REST API 获取所有工作项
- php - 托管时无法访问基于 id 的 URL。文章.php?id=10
- dropwizard - 使用 Jersey 发出 Post 请求时服务器端的 Classcast 异常
- python - 列表排序返回意外输出
- cakephp - CakePHP 3 启用 twig dump()
- javascript - 在选择中更改选项时更改图像