0
일] 적으로 50 개 이상의 u 리를 전송하는 일} 처리 batchUpdate를 호출 할 때마다 각 갱신 조회가 잠재적으로 10,000 개의 레코드를 갱신 할 수 있습니다. 이 전체 프로세스는 시간이 걸리고 결국 트랜잭션 시간 초과 예외로 실패합니다. springContext.xml에 정의 된 데이터 소스가 @Qualifier를 통해 JdbcTemplate에 삽입되고 springContext.xml에 정의 된 트랜잭션 시간 초과가 전체 애플리케이션에 적용될 수 있지만이 특정 트랜잭션에서는 트랜잭션 시간 초과를 무시하고 싶습니다. batchUpdate 메소드를 호출하기 전에 값.batchUpdate 동안 Spring JDBCTemplate에 대한 트랜잭션 시간 초과 값을 오버라이드하는 방법
@Qualifier("myDataSource")
@Autowired
public void setDataSource(DataSource ds) {
this.jdbc = new JdbcTemplate(ds);
jdbc.setFetchSize(10000);
jdbc.setQueryTimeout(0); // zero means there is no limit
}
//I want to set custom transaction timeout before calling this from some other methods.
jdbc.batchUpdate(queries.toArray(new String[0]));
당신이 jdbc.batchUpdate (queries.toArray (new String [0]));를 호출하는 메소드 맨 위에 있다는 것을 의미합니까? 현재이 메소드는 @Transactional annotation으로 표시되어 있지 않지만 전체 batchUpdate가 트랜잭션에서 실행되고 있습니다. – user1614862
5 분 (300 초) 동안 설정 한 후에도 여전히 트랜잭션 타임 아웃이 발생합니다. 문제는 트랜잭션에 select 쿼리 행이 선택되어 있기 때문에 교착 상태가 발생하는 것 같습니다. SELECT 쿼리를 시도했습니다. 내 select 쿼리가 집계 함수를 가지고 있기 때문에 UPDATE도 작동하지 않았습니다. 선택 중에 행을 잠글 수 없도록 내 트랜잭션에 알리는 다른 방법이 있습니까? – user1614862