春季@事务和JDBC自动提交(Spring @Transactional and JDBC auto

2019-09-01 12:27发布

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

我使用的是: - 弹簧与@Transactional注释 - Spring Batch的使用JDBC读者和作家,使用JdbcTemplate的最终定制的微进程

我想知道,如果Spring并设置自动提交= FALSE当前连接的,如果它是由事务管理器处理事务的上下文。 它覆盖默认设置? 因为在我看来,它是有道理这样做。

Answer 1:

PlatformTransactionManager的是一个接口,所以我不会毯说,所有实现设置自动提交=假,但最常见的实现(DataSourceTransactionManager对象)不设置自动提交=假。 看到从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 and JDBC autoCommit