我正在使用 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());
});
}