여러 노드/서버에 배포 한 스프링 배치 응용 프로그램을 만들었습니다. SQL Server 2008 R2를 작업 저장소로 사용하고 있습니다. 모든 노드가 동일한 작업을 동시에 트리거하므로 일부 경우 교착 상태 예외가 발생합니다 (아래 스택 추적). 하나 이상의 노드가 항상 작업을 실행합니다. 어떤 노드는 org.springframework.batch.core.repository.JobInstanceAlreadyCompleteException을 던져서 실패합니다. 교착 상태 예외로 인해 작업이 실패하면 다시 시도 할 수 있도록 Spring 배치 구성의 '작업'태그에 재시도를 추가하고 싶습니다 (JobInstanceAlreadyCompleteException으로 인해 실패 할 것으로 예상 됨).스프링 배치 - 교착 상태 예외로 인해 실패한 작업을 자동으로 다시 실행
청크 수준에서 구성 할 수있는 유사한 기능이 있습니다.
2014-12-19 14:12:07,866 ERROR main [org.springframework.batch.core.launch.support.CommandLineJobRunner] -
org.springframework.dao.DataAccessResourceFailureException: Could not increment identity; nested exception is com.microsoft.sqlserver.jdbc.SQLServerException: Transaction (Process ID 53) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.
at org.springframework.jdbc.support.incrementer.SqlServerMaxValueIncrementer.getNextKey(SqlServerMaxValueIncrementer.java:108)
....
org.springframework.batch.core.launch.support.CommandLineJobRunner.main(CommandLineJobRunner.java:574)
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: Transaction (Process ID 53) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:216)
....
org.springframework.jdbc.support.incrementer.SqlServerMaxValueIncrementer.getNextKey(SqlServerMaxValueIncrementer.java:105)
... 19 more
답변 해 주셔서 감사합니다. – Ali