gpt4 book ai didi

Spring @Transactional 和 JDBC 自动提交

转载 作者:IT老高 更新时间:2023-10-28 13:59:23 25 4
gpt4 key购买 nike

在我的实际应用程序中,我有一个未设置 JDBC autoCommit=false 的 DBCP 连接池。它似乎有默认的 autoCommit=true。这可能是一个错误,但我想了解更改此参数的影响。

我正在使用: - 带有@Transactional 注释的Spring - 带有 JDBC 读取器和写入器的 Spring Batch,最终使用 JdbcTemplate 自定义小任务

我想知道 Spring 是否在当前连接上设置了 autoCommit=false,如果它是在 TransactionManager 处理的事务的上下文中。它会覆盖默认设置吗?因为在我看来这样做是有道理的。

最佳答案

PlatformTransactionManager 是一个接口(interface),所以我不会笼统地说所有实现都设置了 AutoCommit = false,但是最常见的实现 (DataSourceTransactionManager) 确实设置了 AutoCommit = false。请参阅 doBegin 方法的以下代码片段:

if (con.getAutoCommit()) {
txObject.setMustRestoreAutoCommit(true);
if (logger.isDebugEnabled()) {
logger.debug("Switching JDBC Connection [" + con + "] to manual commit");
}
con.setAutoCommit(false);
}
txObject.getConnectionHolder().setTransactionActive(true);

现在正如您所说,这样做非常有意义,否则您将没有回滚段来激活回滚。

关于Spring @Transactional 和 JDBC 自动提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16301315/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com