首页 > for循环中控制事务

for循环中控制事务

Java项目开发过程中,有for循环,逐条处理10万条数据。由于逐条处理数据的时候,要更新6~7张表,希望,每次在执行for循环的时候,都对数据库做一次提交。
1.我的处理方法 是,将for循环中的方法提出来,然后,使用spring的手动开启事务的方法,在提取出来的方法上,配置了@Transactional(propagation = Propagation.REQUIRES_NEW),但是测试了几次,都没有效果。
2.由于提出处理的方法中,也有更新表,调用外部系统接口,查询表的操作。所以我想把有关联关系的操作 配置 在一个事务中,然后 外层的事务配置和内层的事务配置 如何来管理?

希望 得到各位的解答,谢谢!!!


把for循环放置在controller层或者非service层,然后事务是在service层的方法上配置的,这样应该可以实现每调用一次提交一次。


https://docs.jboss.org/hibernate/orm/4.0/devguide/en-US/html/ch04.html


  1. 如果题主是用spring来做声明式事务的话,方法直接调用内部方法是不会走到代理类的(也就是不会走到切面),所以@Transactional可能会失效

  2. 题主这里的外部接口是通过RPC方法调用的么?如果通过RPC调用的话,建议题主不要直接放到事务里面,因为如果发生超时情况,会发生长事务,如果并发量大的话导致数据库连接数被用尽,系统就会处于不可用状态。

【热门文章】
【热门文章】