Java项目开发过程中,有for循环,逐条处理10万条数据。由于逐条处理数据的时候,要更新6~7张表,希望,每次在执行for循环的时候,都对数据库做一次提交。
1.我的处理方法 是,将for循环中的方法提出来,然后,使用spring的手动开启事务的方法,在提取出来的方法上,配置了@Transactional(propagation = Propagation.REQUIRES_NEW),但是测试了几次,都没有效果。
2.由于提出处理的方法中,也有更新表,调用外部系统接口,查询表的操作。所以我想把有关联关系的操作 配置 在一个事务中,然后 外层的事务配置和内层的事务配置 如何来管理?
希望 得到各位的解答,谢谢!!!
Si le sujet utilise spring pour effectuer des transactions déclaratives, la méthode appelant directement la méthode interne n'ira pas à la classe proxy (c'est-à-dire qu'elle n'ira pas à l'aspect), donc
@Transactional
peut être invalideL'interface externe est-elle appelée ici via la méthode RPC ? Si elle est appelée via RPC, il est recommandé au sujet de ne pas la mettre directement dans la transaction, car si un timeout se produit, une longue transaction se produira, et si la concurrence est trop grande, le nombre de connexions à la base de données sera épuisé et le système sera dans un état indisponible.
https://docs.jboss.org/hibernate/orm/4.0/devguide/en-US/html/ch04.html
Placez la boucle for dans la couche contrôleur ou la couche non-service, puis configurez la transaction sur la méthode de la couche service, afin qu'il soit possible de la soumettre une fois à chaque appel.