首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在NamedParameterJdbcTemplate.batchUpdate中禁用自动提交

在NamedParameterJdbcTemplate.batchUpdate中禁用自动提交
EN

Stack Overflow用户
提问于 2013-05-31 01:52:42
回答 2查看 6.3K关注 0票数 3

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

我可以在connection对象中关闭自动提交模式,但不确定如何使用NamedParameterJdbcTemplate对象执行相同的操作。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-05 03:37:00

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

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

代码语言:javascript
复制
transTemplate.execute( new TransactionCallbackWithoutResult()
        {       
                @Override
                protected void doInTransactionWithoutResult( TransactionStatus status)
                {
                    status.setRollbackOnly();
                    //business logic
                }

        });
票数 3
EN

Stack Overflow用户

发布于 2013-05-31 02:24:11

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

如果您想让事务管理掌握在自己的手中并对其进行微调(也称为随意执行提交和回滚),则必须直接获取底层TransactionManager。

引用自Spring docs

使用PlatformTransactionManager

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

代码语言:javascript
复制
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);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16842852

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档