import org.quartz.JobDataMap;

import org.quartz.JobDetail;

import org.quartz.Scheduler;

import org.quartz.SchedulerException;

import org.quartz.SchedulerFactory;

import org.quartz.Trigger;

import org.quartz.impl.JobDetailImpl;

import org.quartz.impl.StdSchedulerFactory;

import org.quartz.impl.triggers.CronTriggerImpl;


import com.schedule.ScheduleFunctions;


public class quartz_test {


private SchedulerFactory SCHEDULE_FACTORY = null;

private Scheduler SCHEDULER = null;

private ScheduleFunctions SF = null;

public static void main(String[] args) {

quartz_test qt = new quartz_test();

if(!qt.initSchedule()) {

System.out.println("initSchedule error");

}

while(true) {

try {

//database rows

String EXPR = " */5 15 * * * ";

String rClass = "testJAVA";

String key = "JOB_KEY";

Class c = Class.forName(rClass);

JobDetail job = new JobDetailImpl(key, key, c);

Trigger trigger = new CronTriggerImpl(key, key, EXPR);

//JobDataMap jobDataMap = job.getJobDataMap();

//jobDataMap.put("ROW", row);

if(!qt.SCHEDULER.checkExists(job.getKey())) {

qt.SCHEDULER.scheduleJob(job,trigger);

System.out.println("scheduler started..");

} else {

//SCHEDULER.rescheduleJob(trigger.getKey(), trigger);

qt.SCHEDULER.deleteJob(job.getKey());

qt.SCHEDULER.scheduleJob(job,trigger);

System.out.println("scheduler changed..");

}

} catch(Exception e) {

break;

}

}

}

public boolean initSchedule() {

try {

SchedulerFactory SCHEDULE_FACTORY = new StdSchedulerFactory();

Scheduler SCHEDULER = SCHEDULE_FACTORY.getScheduler();

SCHEDULER.start();

        } catch (SchedulerException e) {

            return false;

        }

return true;

}

}




----------------------------------------------------------------------------------


String EXPR

String rClass

String key


이거 세개는 디비에서 조회한 값이라 치고, 

실행되는 클래스에 값을 넘겨주려면 jobDataMap 을 쓰면 됨.

job.getKey() = key 이니까 현재까지 등록된 스케줄에 key  가 있는지 검사한 후

없으면 새로운 스케줄을 생성하고, 있으면 현재 트리거 값으로 정보를 변경해준다.

스케줄은 보통 종료시간을 잡아놓지는 않아서 너처럼 13 시에 시작 하고 14 시에 종료. 이런게 아니라.

크론탭 표현식으로 13시에 15초 마다 한번씩 실행. 이라는 트리거를 등록해 준거야.

위처럼 스케줄을 set 해주면, 해당 트리거 조건이 댔을 때 쓰레드가 시작된다.

쓰래드 설정도 할수 있는데 그건 너가 몰라도 될듯