编程式事务的简单使用

释义:编程式事务和声明式事务的区别

编程式事务需要在代码中写明事务的提交commit、回滚rollback,如在执行某方法时需要事务处理,你需要在方法开始时开启事务,处理完后,在方法结束时候,关闭事务。入侵性较强,但处理粒度细。

声明式事务需要在配置文件中定义事务的关注点和切入点,以及什么时候需要事务,在系统有需要的时候会自动提交,自动回滚。或者在需要事务的方法上添加注解控制事务。


问题:公司业务需求,通过数据接口读取需要的数据后往oracle数据库中插入1000万条甚至更多数据,循环批量插入,如果使用Spring的事务管理,定义事务传播属性为requiredpropagation="REQUIRED")时,每次循环都会把insert加入到同一个事务中,直到循环结束事务才提交,当数据量过大时,就会出现数据库连接池就会不足(一直没有释放)的问题。

解决:使用编程式事务,每次循环结束都执行commit,提交事务。

代码:
@Autowired
DruidDataSource dataSource; //Spring配置文件中的dataSource
@Autowired
TestBeanMapper testBeanMapper;
 
@Override
public int inertBatch(List<TestBean> list) throws Exception{
DefaultTransactionDefinition def = new DefaultTransactionDefinition();
//事务的传播属性
def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
DataSourceTransactionManager txManager = new DataSourceTransactionManager(dataSource);
TransactionStatus status = txManager.getTransaction(def);
Int result = 0;
Try{
Result = testBeanMapper.insertBatch(list);
}catch(Exception e){
txManager.rollback(status);
Int result = 0;
return reuslt;
}
txManager.commit(status);
return result;
}

 

本文使用的是SpringMVC+MybatisbeanMapper,且事务的隔离级别为默认。

编程式事务和Spring的声明式事务混合使用时,注意Spring的配置文件中关于事务的切入点配置一定不要包含编程式事务所在的package,不然会默认使用Spring的事务管理。

参考(学习借鉴):

1、Spring声明式事务:http://java.9sssd.com/javafw/art/1215

2、Jdbc编程式事务:http://jinnianshilongnian.iteye.com/blog/1441271


转载于:https://my.oschina.net/shuming/blog/616788

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值