2014-12-24 1 views
0

여러 노드/서버에 배포 한 스프링 배치 응용 프로그램을 만들었습니다. 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 
 

답변

0

는 이야기 군나르 Hillert에서 봐, 그리고 I가 2013 년 SpringOne2GX에서 한 군나르 봄 통합을 사용하여 증명 : 거기에 이런 일이 작업 수준에서

스택 추적 경우 제안을 제공하십시오 Spring Batch와 결합하여 작업을 재시작 할 단계 또는 작업 실패시 메시지를 보냅니다. 여기에서 이야기 자체를 볼 수 있습니다 : https://www.youtube.com/watch?v=8tiqeV07XlI

구체적으로 32:58을보십시오.

+0

답변 해 주셔서 감사합니다. – Ali

관련 문제