検索

ホームページ  >  に質問  >  本文

java - for循环中控制事务

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

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

PHPzPHPz2889日前779

全員に返信(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 ループをコントローラー層または非サービス層に配置し、呼び出されるたびに 1 回送信できるように、サービス層メソッドでトランザクションを構成します。

    返事
    0
  • キャンセル返事