搜尋

首頁  >  問答  >  主體

java - for循环中控制事务

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

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

PHPzPHPz2918 天前811

全部回覆(3)我來回復

  • 高洛峰

    高洛峰2017-04-17 17:47:26

    1. 如果題主是用spring來做聲明式事務的話,方法直接調用內部方法是不會走到代理類的(也就是不會走到切面),所以@Transactional可能會失效

    2. 題主這裡的外部接口是透過RPC方法調用的麼?如果通過RPC調用的話,建議題主不要直接放到事務裡面,因為如果發生超時情況,會發生長事務,如果並發量大的話導致數據庫連線數被用盡,系統就會處於不可用狀態。

    回覆
    0
  • PHPz

    PHPz2017-04-17 17:47:26

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

    回覆
    0
  • PHP中文网

    PHP中文网2017-04-17 17:47:26

    把for循環放置在controller層或非service層,然後事務是在service層的方法上配置的,這樣應該可以實現每調用一次提交一次。

    回覆
    0
  • 取消回覆