3

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

我可以从对象设置自动提交模式,但不知道如何使用对象connection来做同样的事情。NamedParameterJdbcTemplate

4

2 回答 2

3

我已经使用TransactionTemplate完成了我的实现

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

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

        });
于 2013-06-04T19:37:00.433 回答
1

我假设您知道 Spring 中的事务管理,通过定义@Transactional和传递元数据,PropagationIsolation可以优雅地管理事务。如果不看一下Spring 文档。在大多数情况下,这就是您所需要的。

如果您想自己获得事务管理并对其进行微调(也就是随意执行提交和回滚),您必须直接获取底层TransactionManager

引用Spring 文档

使用 PlatformTransactionManager

您也可以org.springframework.transaction.PlatformTransactionManager直接使用 来管理您的交易。只需通过PlatformTransactionManagerbean 引用将您正在使用的实现传递给您的 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);
于 2013-05-30T18:24:10.673 回答