我正在使用NamedParameterJdbcTemplate.batchUpdate
对我的数据库表进行批量更新,但我想禁用auto-commit
并手动执行提交。
我可以从connection
对象设置自动提交模式,但不知道如何使用NamedParameterJdbcTemplate
对象执行相同操作。
答案 0 :(得分:2)
它有execute
方法,我在此函数的回调中执行业务逻辑。
transTemplate.execute( new TransactionCallbackWithoutResult()
{
@Override
protected void doInTransactionWithoutResult( TransactionStatus status)
{
status.setRollbackOnly();
//business logic
}
});
答案 1 :(得分:1)
我假设您了解Spring中的事务管理,通过定义@Transactional
并传递Propagation
和Isolation
的元数据,您可以优雅地管理事务。如果没有看看Spring documentation。在大多数情况下,这就是你所需要的一切。
如果您想自己动手进行事务管理并对其进行微调(也就是执行提交和回滚),则必须直接获取基础 TransactionManager 。
引用Spring docs:
使用PlatformTransactionManager
您还可以直接使用org.springframework.transaction.PlatformTransactionManager
来管理您的交易。只需通过bean引用将您正在使用的PlatformTransactionManager
的实现传递给bean。然后,使用TransactionDefinition
和TransactionStatus
对象,您可以启动事务,回滚和提交。
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);