在NamedParameterJdbcTemplate.batchUpdate中禁用自动提交

时间:2013-05-30 17:52:42

标签: java sql spring jdbctemplate autocommit

我正在使用NamedParameterJdbcTemplate.batchUpdate对我的数据库表进行批量更新,但我想禁用auto-commit并手动执行提交。

我可以从connection对象设置自动提交模式,但不知道如何使用NamedParameterJdbcTemplate对象执行相同操作。

2 个答案:

答案 0 :(得分:2)

我已使用TransactionTemplate

完成了我的实施

它有execute方法,我在此函数的回调中执行业务逻辑。

transTemplate.execute( new TransactionCallbackWithoutResult()
        {       
                @Override
                protected void doInTransactionWithoutResult( TransactionStatus status)
                {
                    status.setRollbackOnly();
                    //business logic
                }

        });

答案 1 :(得分:1)

我假设您了解Spring中的事务管理,通过定义@Transactional并传递PropagationIsolation的元数据,您可以优雅地管理事务。如果没有看看Spring documentation。在大多数情况下,这就是你所需要的一切。

如果您想自己动手进行事务管理并对其进行微调(也就是执行提交和回滚),则必须直接获取基础 TransactionManager

引用Spring docs

使用PlatformTransactionManager

您还可以直接使用org.springframework.transaction.PlatformTransactionManager来管理您的交易。只需通过bean引用将您正在使用的PlatformTransactionManager的实现传递给bean。然后,使用TransactionDefinitionTransactionStatus对象,您可以启动事务,回滚和提交。

DefaultTransactionDefinition def = new DefaultTransactionDefinition();
// explicitly setting the transaction name is something that can only be done programmatically
def.setName("SomeTxName");
def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);

TransactionStatus status = txManager.getTransaction(def);
try {
  // execute your business logic here
}
catch (MyException ex) {
  txManager.rollback(status);
  throw ex;
}
txManager.commit(status);