배치 interrupt 관련 재문의드립니다.
- 작성자 :
- 이*철
- 작성일 :
- 2020-02-14 17:17:49
- 조회수 :
- 2,165
- 구분 :
- 운영환경
- 진행상태 :
- 완료
Q
안녕하세요. 배치 재문의드립니다.
아래와같이 답변 받았는데요.
Listener 의 경우는 step 이 시작하기 전이나 끝났을 때 처리해주는거 같은데요.
무한반복중인 반복문이 execute에서 실행되고 있고 stop 했을 때 해당 반복문을 중지하고 싶은 상황입니다.
전역변수를 주고 afterstep에서 값을 변경하고 반복문에서 해당 변수값을 읽어서 중지처리를 해보려고 했는데요.
afterstep 이 호출이 안되더라구요.
그래서 StoppableTasklet 를 implements 해서 stop 함수도 써봤는데 stop 호출은 되고 전역변수 값은 변경되나
반복문에서는 변경 전 값으로 나와서 반복문이 중지가 되지 않습니다.
다시 한번 적용할 수 있는 방법이 있는지 문의드립니다.
감사합니다.
질문
배치 환경에 step 하나에 tasklet을 등록해서 사용중인데요
실행중인 job stop 했을때 해당 tasklet이 실행중인 자바로 interrupt 값을 전달하거나 함수를 호출할수 있나요??
stop하면 상태는 중지 상태인데 실행되던 java는 계속 진행이 되어서요.
답변
안녕하세요.
표준프레임워크센터 입니다.
Job이나 Step에서
Listener를 추가할수 있습니다.
여기서 상태에 따른
추가작업이나 로그 저장등의 부가 기능을 구현하실수 있습니다.
다음 위키 페이지를 참고하실수 있을듯 합니다.
https://www.egovframe.go.kr/wiki/doku.php?id=egovframework:rte2:brte:batch_core:listener
감사합니다.
아래와같이 답변 받았는데요.
Listener 의 경우는 step 이 시작하기 전이나 끝났을 때 처리해주는거 같은데요.
무한반복중인 반복문이 execute에서 실행되고 있고 stop 했을 때 해당 반복문을 중지하고 싶은 상황입니다.
전역변수를 주고 afterstep에서 값을 변경하고 반복문에서 해당 변수값을 읽어서 중지처리를 해보려고 했는데요.
afterstep 이 호출이 안되더라구요.
그래서 StoppableTasklet 를 implements 해서 stop 함수도 써봤는데 stop 호출은 되고 전역변수 값은 변경되나
반복문에서는 변경 전 값으로 나와서 반복문이 중지가 되지 않습니다.
다시 한번 적용할 수 있는 방법이 있는지 문의드립니다.
감사합니다.
질문
배치 환경에 step 하나에 tasklet을 등록해서 사용중인데요
실행중인 job stop 했을때 해당 tasklet이 실행중인 자바로 interrupt 값을 전달하거나 함수를 호출할수 있나요??
stop하면 상태는 중지 상태인데 실행되던 java는 계속 진행이 되어서요.
답변
안녕하세요.
표준프레임워크센터 입니다.
Job이나 Step에서
Listener를 추가할수 있습니다.
여기서 상태에 따른
추가작업이나 로그 저장등의 부가 기능을 구현하실수 있습니다.
다음 위키 페이지를 참고하실수 있을듯 합니다.
https://www.egovframe.go.kr/wiki/doku.php?id=egovframework:rte2:brte:batch_core:listener
감사합니다.
A
안녕하세요.
표준프레임워크센터 입니다.
자세한 사정은 알수 없으나
커스텀을 하고 계시는 듯 합니다.
이경우 너무 많은 경우의 수나 상황이 있기 때문에
저희가 가이드 하는데 한계가 있습니다.
질문 내용에서 눈에 띄는 부분이
"무한반복중인 반복문이 execute에서 실행"이라고 되어 있는데요.
해댱 execute 메소드에 무한 loop문이 있는것으 파악됩니다.
여기서 작업이 완료되어도 loop문은 반복 되어
해당 step이 종료되지 않는것으로 판단됩니다.
가급적 해당 step이 배치의 step 규격에 맞게
종료되도록 구성하는게 유리 할듯 합니다.
여러 사정이 있으시겠지만
loop문 내에서 조건에 따라 break가 걸릴수 있도록 조치가 필요해 보입니다.
외부에서 강제로 종료시는것은 바람직해 보이지 않습니다.
감사합니다.
표준프레임워크센터 입니다.
자세한 사정은 알수 없으나
커스텀을 하고 계시는 듯 합니다.
이경우 너무 많은 경우의 수나 상황이 있기 때문에
저희가 가이드 하는데 한계가 있습니다.
질문 내용에서 눈에 띄는 부분이
"무한반복중인 반복문이 execute에서 실행"이라고 되어 있는데요.
해댱 execute 메소드에 무한 loop문이 있는것으 파악됩니다.
여기서 작업이 완료되어도 loop문은 반복 되어
해당 step이 종료되지 않는것으로 판단됩니다.
가급적 해당 step이 배치의 step 규격에 맞게
종료되도록 구성하는게 유리 할듯 합니다.
여러 사정이 있으시겠지만
loop문 내에서 조건에 따라 break가 걸릴수 있도록 조치가 필요해 보입니다.
외부에서 강제로 종료시는것은 바람직해 보이지 않습니다.
감사합니다.