在我的实际应用程序中,我有一个没有设置JDBC autoCommit=false的DBCP连接池。它似乎有默认的autoCommit=true。这可能是一个错误,但我想了解更改此参数的影响。
我使用:- Spring with @Transactional - Spring Batch with JDBC readers and writers,最终使用JdbcTemplate自定义微线程
我想知道如果在TransactionManager处理的事务上下文中,Spring是否在当前连接上设置了autoCommit=false。它是否覆盖默认设置?因为在我看来,这样做是有意义的。
发布于 2013-04-30 22:28:34
PlatformTransactionManager是一个接口,所以我不会断言所有的实现都设置了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);现在,正如您所说的,这样做非常有意义,否则您将不会有一个回滚段来激活回滚。
https://stackoverflow.com/questions/16301315
复制相似问题