찾다

 >  Q&A  >  본문

java - for循环中控制事务

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

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

PHPzPHPz2889일 전775

모든 응답(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 루프를 배치한 후, 서비스 레이어 방식에서 트랜잭션을 구성하여 호출할 때마다 한 번씩 제출이 가능하도록 합니다.

    회신하다
    0
  • 취소회신하다