Java项目开发过程中,有for循环,逐条处理10万条数据。由于逐条处理数据的时候,要更新6~7张表,希望,每次在执行for循环的时候,都对数据库做一次提交。
1.我的处理方法 是,将for循环中的方法提出来,然后,使用spring的手动开启事务的方法,在提取出来的方法上,配置了@Transactional(propagation = Propagation.REQUIRES_NEW),但是测试了几次,都没有效果。
2.由于提出处理的方法中,也有更新表,调用外部系统接口,查询表的操作。所以我想把有关联关系的操作 配置 在一个事务中,然后 外层的事务配置和内层的事务配置 如何来管理?
希望 得到各位的解答,谢谢!!!
주체가 Spring을 사용하여 선언적 트랜잭션을 수행하는 경우 내부 메서드를 직접 호출하는 메서드는 프록시 클래스로 이동하지 않으므로(즉, 측면으로 이동하지 않음)
@Transactional
유효하지 않음여기서 외부 인터페이스는 RPC 방식으로 호출하는 건가요? RPC로 호출하는 경우, 타임아웃이 발생하면 긴 트랜잭션이 발생하므로 주체가 직접 트랜잭션에 넣지 않는 것이 좋습니다. 동시성이 너무 크면 데이터베이스 연결 수가 소진되어 시스템을 사용할 수 없는 상태가 됩니다.
https://docs.jboss.org/hibernate/orm/4.0/devguide/en-US/html/ch04.html
컨트롤러 레이어나 비서비스 레이어에 for 루프를 배치한 후, 서비스 레이어 방식에서 트랜잭션을 구성하여 호출할 때마다 한 번씩 제출이 가능하도록 합니다.