Java项目开发过程中,有for循环,逐条处理10万条数据。由于逐条处理数据的时候,要更新6~7张表,希望,每次在执行for循环的时候,都对数据库做一次提交。
1.我的处理方法 是,将for循环中的方法提出来,然后,使用spring的手动开启事务的方法,在提取出来的方法上,配置了@Transactional(propagation = Propagation.REQUIRES_NEW),但是测试了几次,都没有效果。
2.由于提出处理的方法中,也有更新表,调用外部系统接口,查询表的操作。所以我想把有关联关系的操作 配置 在一个事务中,然后 外层的事务配置和内层的事务配置 如何来管理?
希望 得到各位的解答,谢谢!!!
高洛峰2017-04-17 17:47:26
サブジェクトが Spring を使用して宣言的トランザクションを実行する場合、内部メソッドを直接呼び出すメソッドはプロキシ クラスに行かない (つまり、アスペクトに行かない) ため、@Transactional
は無効になる可能性があります
ここでの外部インターフェイスは RPC メソッドを通じて呼び出されますか? RPC を通じて呼び出される場合、タイムアウトが発生すると長いトランザクションが発生するため、サブジェクトはそれをトランザクションに直接入れないことをお勧めします。同時実行性が大きすぎると、データベース接続の数が枯渇し、システムが使用できない状態になります。
PHP中文网2017-04-17 17:47:26
for ループをコントローラー層または非サービス層に配置し、呼び出されるたびに 1 回送信できるように、サービス層メソッドでトランザクションを構成します。