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);
반응형
Posted by 질주하는구
,