spring quartz를 이용해서 스케줄을 생성하고 운영 할때 소스에서 상황에 맞춰서
운영중인 스케줄을 멈추거나 삭제 하거나 해야 하는경우 아래의 소스를 이용해서 처리 가능 합니다.
(2대의 서버에서 active<->standby로 스케줄을 운영하는 경우)
-임의의 소스 생성
package egovframework.cmmn.vo; import java.io.Serializable; import org.quartz.Scheduler; import org.quartz.SchedulerException; import org.quartz.impl.StdSchedulerFactory; public class SchedulerVO implements Serializable{ private static final long serialVersionUID = 1L; private static Scheduler dynamicSch; private static String jobGroupName = "dynamicScheduler"; public static Scheduler getDynamicSch() throws SchedulerException { if(dynamicSch==null){ dynamicSch = new StdSchedulerFactory().getScheduler(); } return dynamicSch; } public static String getJobGroupName() { return jobGroupName; } }- 동적으로 스케줄 추가
Scheduler dynamicSch = SchedulerVO.getDynamicSch(); String jobGroupName = SchedulerVO.getJobGroupName(); String classPath = ""; String tegerMethod = ""; MethodInvokingJobDetailFactoryBean jobDetailBean = new MethodInvokingJobDetailFactoryBean(); Class> targetClass = Class.forName(classPath); jobDetailBean.setTargetObject(targetClass.newInstance()); //스케줄 수행할 class파일 설정 jobDetailBean.setTargetMethod(tegerMethod); //실행될 메소드 설정 jobDetailBean.setGroup(jobGroupName); //실행시 그룹명 지정 jobDetailBean.setName(scenarioKey); //스케줄 아이디 지정 jobDetailBean.afterPropertiesSet(); //cronTriger 설정 CronTriggerFactoryBean cronTrigger = new CronTriggerFactoryBean(); cronTrigger.setJobDetail((JobDetail)jobDetailBean.getObject()); cronTrigger.setCronExpression(schTime); cronTrigger.setName(scenarioKey); cronTrigger.setGroup(jobGroupName); cronTrigger.afterPropertiesSet(); //스케줄에 추가할 정보 셋팅 dynamicSch.scheduleJob((JobDetail)jobDetailBean.getObject(), cronTrigger.getObject());- 동작 중인 스케줄 삭제
Scheduler dynamicSch = SchedulerVO.getDynamicSch(); String jobGroupName = SchedulerVO.getJobGroupName(); //setName에 사용한 정보를 기준으로 삭제 작업 진행 dynamicSch.deleteJob(new JobKey("scenario_"+scenarioVO.getScenarioSeq(),jobGroupName));- 동작 중인 스케줄 정보 변경
Scheduler dynamicSch = SchedulerVO.getDynamicSch(); String jobGroupName = SchedulerVO.getJobGroupName(); CronTriggerImpl cronTriggerImpl = (CronTriggerImpl)dynamicSch.getTrigger(new TriggerKey("scenario_"+scenarioVO.getScenarioSeq(),jobGroupName)); //동작 시간을 변경 cronTriggerImpl.setCronExpression(scenarioVO.getSchTime()); dynamicSch.rescheduleJob(new TriggerKey("scenario_"+scenarioVO.getScenarioSeq(),jobGroupName), cronTriggerImpl);
반응형
'JAVA' 카테고리의 다른 글
spring - tiles 사용 (0) | 2021.05.04 |
---|---|
mybatis bean 생성시 enum 이용(typeHandler) (0) | 2020.09.04 |
jackson 사용시 json 데이터 관리하기 (0) | 2020.09.04 |
ajax호출 시 메소드 호출 및 리턴을 위한 공통 메소드 (0) | 2020.09.04 |
서버모니터링을 위한 client프로그램 (0) | 2020.09.03 |