배치 스케줄러 EgovSchedulerRunner 실행시간 설정 문의 (delayTime)
- 작성자 :
- 최*우
- 작성일 :
- 2013-03-25 11:14:02
- 조회수 :
- 1,600
- 구분 :
- 실행환경
- 진행상태 :
- 완료
Q
클래스 EgovSchedulerRunner 생성자의 마지막 매개변수 delayTime 입력을 통해 스케줄러의 실행시간을 지정하도록 되어 있는데 계속(무한) 실행하고 싶다면 어떻게 해야 하나요?
아래는 배치 스케줄러 예제 소스코드입니다.
---
/*
* EgovSchedulerRunner에 contextPath, schedulerJobPath, jobPaths를 인수로 넘겨서 실행한다.
* contextPath: Batch Job 실행에 필요한 context 정보가 기술된 xml파일 경로
* schedulerJobPath: Scheduler의 Trigger가 수행할 SchedulerJob(ex: QuartzJob)이 기술된 xml파일 경로
* jobPaths: Batch Job이 기술 된 xml 파일 경로들
* delayTime: Scheduler 실행을 위해 ApplicationContext를 종료를 지연시키는 시간(실행시간)
* (기본 30000 milliseconds: 30초)
*/
EgovSchedulerRunner egovSchedulerRunner = new EgovSchedulerRunner(
"/egovframework/batch/context-batch-scheduler.xml",
"/egovframework/batch/context-scheduler-job.xml",
jobPaths, 30000);
아래는 배치 스케줄러 예제 소스코드입니다.
---
/*
* EgovSchedulerRunner에 contextPath, schedulerJobPath, jobPaths를 인수로 넘겨서 실행한다.
* contextPath: Batch Job 실행에 필요한 context 정보가 기술된 xml파일 경로
* schedulerJobPath: Scheduler의 Trigger가 수행할 SchedulerJob(ex: QuartzJob)이 기술된 xml파일 경로
* jobPaths: Batch Job이 기술 된 xml 파일 경로들
* delayTime: Scheduler 실행을 위해 ApplicationContext를 종료를 지연시키는 시간(실행시간)
* (기본 30000 milliseconds: 30초)
*/
EgovSchedulerRunner egovSchedulerRunner = new EgovSchedulerRunner(
"/egovframework/batch/context-batch-scheduler.xml",
"/egovframework/batch/context-scheduler-job.xml",
jobPaths, 30000);
A
안녕하세요 프레임워크 센터입니다.
해당 문제는 EgovSchedulerRunner를 확장한 클래스를 하나 만드신 후에
context.close() 를 주석처리하시면 됩니다.
public class EgovSchedulerRunnerExtend extends EgovSchedulerRunner {
.
.
중략
.
.
String[] locations = paths.toArray(new String[paths.size()]);
// ApplicationContext를 생성한다.
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
locations, false);
context.refresh();
logger.warn("ApplicationContext Running Time: " + delayTime / 1000 + " seconds");
logger.warn("CronTrigger is loaded on Spring ApplicationContext");
try {
// 설정한 시간만큼 대기하고, 그 사이에 Scheduler가 수행된다.
Thread.sleep(delayTime);
} catch (InterruptedException e) {
/* interrupted by other thread */
}
//context.close();
}
}
위의 경우처럼 context.close()를 주석처리 하시고
EgovSchedulerJobRunner에서 스케줄러를 호출하실 때, 아래와 같이 해주시면 됩니다.
EgovSchedulerRunner egovSchedulerRunner = new EgovSchedulerRunnerExtend(
"/egovframework/batch/context-batch-scheduler.xml",
"/egovframework/batch/context-scheduler-job.xml",
jobPaths, 30000);
egovSchedulerRunner.start();
그럼, 수고하세요
해당 문제는 EgovSchedulerRunner를 확장한 클래스를 하나 만드신 후에
context.close() 를 주석처리하시면 됩니다.
public class EgovSchedulerRunnerExtend extends EgovSchedulerRunner {
.
.
중략
.
.
String[] locations = paths.toArray(new String[paths.size()]);
// ApplicationContext를 생성한다.
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
locations, false);
context.refresh();
logger.warn("ApplicationContext Running Time: " + delayTime / 1000 + " seconds");
logger.warn("CronTrigger is loaded on Spring ApplicationContext");
try {
// 설정한 시간만큼 대기하고, 그 사이에 Scheduler가 수행된다.
Thread.sleep(delayTime);
} catch (InterruptedException e) {
/* interrupted by other thread */
}
//context.close();
}
}
위의 경우처럼 context.close()를 주석처리 하시고
EgovSchedulerJobRunner에서 스케줄러를 호출하실 때, 아래와 같이 해주시면 됩니다.
EgovSchedulerRunner egovSchedulerRunner = new EgovSchedulerRunnerExtend(
"/egovframework/batch/context-batch-scheduler.xml",
"/egovframework/batch/context-scheduler-job.xml",
jobPaths, 30000);
egovSchedulerRunner.start();
그럼, 수고하세요