배치 스케쥴러 중복실행관련 문의드립니다.2
- 작성자 :
- 임*식
- 작성일 :
- 2013-07-23 14:44:08
- 조회수 :
- 3,038
- 구분 :
- 실행환경
- 진행상태 :
- 완료
Q
추가질문 ========================================================
하단 질문에 대한 답변을 보고 실행해보고 있는데 구체적이지가 않아 한참을
해매고 있습니다.
저희 쪽에서는 jobDetailBean 방식으로 구성을 해놨는데
MethodInvokingJobDetailFactoryBean 방식을 적용을 하려고 보니
기존 방식(jobDetailBean)을 다 버리고 새롭게 MethodInvokingJobDetailFactoryBean 해야하는 것 같아서요.
혹시 샘플 파일도 첨부했는데 도움이 될까해서요
보시고 구체적으로 답변 주셨으면 좋겠습니다.
답변 ===========================================================
jobDetail로 지정하신 MethodInvokingJobDetailFactoryBean의 속성 중에 "concurrent" 속성이 있습니다. 이 속성을 "false"로 하시면 중복호출되지 않습니다.
질문 ===========================================================
배치 스케쥴러 중복실행관련 문의드립니다.
현재 하단처럼 crontab을 사용하여 배치job을 실행하고 있습니다.
1분간격으로 job이 실행되는데 문제는
job이 10분을 초과할 경우 새로운 job instance가 실행되어서
DB 입력시 무결성에러를 발생하고 있습니다.
DB 키값을 max+1이 아닌 시퀀스를 부여하여 자동증가하게 했는데도
에러가 나더라구요..
결론은 job이 끝난 후에 job이 실행되게 해야하고
job은 늘 정각에서 10분간격으로
실행되도록 해야하는데.. 방법 있을까요?
프로그램적으로 어떻게 추가해야하는지 구체적인 예시가 있는지
부탁드립니다.
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="jobDetail" />
<property name="cronExpression" value="0 0/10 * * * ?" />
</bean>
</property>
</bean>
하단 질문에 대한 답변을 보고 실행해보고 있는데 구체적이지가 않아 한참을
해매고 있습니다.
저희 쪽에서는 jobDetailBean 방식으로 구성을 해놨는데
MethodInvokingJobDetailFactoryBean 방식을 적용을 하려고 보니
기존 방식(jobDetailBean)을 다 버리고 새롭게 MethodInvokingJobDetailFactoryBean 해야하는 것 같아서요.
혹시 샘플 파일도 첨부했는데 도움이 될까해서요
보시고 구체적으로 답변 주셨으면 좋겠습니다.
답변 ===========================================================
jobDetail로 지정하신 MethodInvokingJobDetailFactoryBean의 속성 중에 "concurrent" 속성이 있습니다. 이 속성을 "false"로 하시면 중복호출되지 않습니다.
질문 ===========================================================
배치 스케쥴러 중복실행관련 문의드립니다.
현재 하단처럼 crontab을 사용하여 배치job을 실행하고 있습니다.
1분간격으로 job이 실행되는데 문제는
job이 10분을 초과할 경우 새로운 job instance가 실행되어서
DB 입력시 무결성에러를 발생하고 있습니다.
DB 키값을 max+1이 아닌 시퀀스를 부여하여 자동증가하게 했는데도
에러가 나더라구요..
결론은 job이 끝난 후에 job이 실행되게 해야하고
job은 늘 정각에서 10분간격으로
실행되도록 해야하는데.. 방법 있을까요?
프로그램적으로 어떻게 추가해야하는지 구체적인 예시가 있는지
부탁드립니다.
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="jobDetail" />
<property name="cronExpression" value="0 0/10 * * * ?" />
</bean>
</property>
</bean>
A
안녕하세요. 임응식님.
JobDetail 방식은 Quartz에 좀 더 의존적인 방법으로 해당 JobDetailBean에 다음과 같은 메소드를 만들어 추가해 놓으시면 동시 실행이 되지 않도록 되실 것 같습니다.
public boolean isStateful() {
return true;
}
해당 메소드는 JobDetail 클래스 메소드를 overriding하는 것입니다.
두번째의 경우는 sequence를 사용하시는데, 무결성 오류가 발생하신다는 건가요?
sequence는 transaction과 상관없이 동일한 값을 리턴하지 않도록 되어 있습니다. 이상합니다. sequence로 사용된 부분이 아니라 다른 무결성인지 확인 부탁드립니다.
첫번째 답변 드린 방식으로 처리하시면 동일한 정10분마다(0,10,20,..) 마다 호출을 하고, 혹.. 이전 job이 돌고 있으면 호출되지 않기 때문에.. 다음 10분단위 시간에 호출되기 때문에 원하시는 형태가 가능한 것 같습니다.
그럼, 즐거운 하루되십시오.
감사합니다.
JobDetail 방식은 Quartz에 좀 더 의존적인 방법으로 해당 JobDetailBean에 다음과 같은 메소드를 만들어 추가해 놓으시면 동시 실행이 되지 않도록 되실 것 같습니다.
public boolean isStateful() {
return true;
}
해당 메소드는 JobDetail 클래스 메소드를 overriding하는 것입니다.
두번째의 경우는 sequence를 사용하시는데, 무결성 오류가 발생하신다는 건가요?
sequence는 transaction과 상관없이 동일한 값을 리턴하지 않도록 되어 있습니다. 이상합니다. sequence로 사용된 부분이 아니라 다른 무결성인지 확인 부탁드립니다.
첫번째 답변 드린 방식으로 처리하시면 동일한 정10분마다(0,10,20,..) 마다 호출을 하고, 혹.. 이전 job이 돌고 있으면 호출되지 않기 때문에.. 다음 10분단위 시간에 호출되기 때문에 원하시는 형태가 가능한 것 같습니다.
그럼, 즐거운 하루되십시오.
감사합니다.