Quartz JOB 하나에 여러 Trigger 구성 시 주의사항

6315 단어 trigger
public class SimpleExample {



    

    public void run() throws Exception {

        Logger log = LoggerFactory.getLogger(SimpleExample.class);



        log.info("------- Initializing ----------------------");



        // First we must get a reference to a scheduler

        SchedulerFactory sf = new StdSchedulerFactory();

        StdScheduler sched = (StdScheduler)sf.getScheduler();



        log.info("------- Initialization Complete -----------");



        // computer a time that is on the next round minute

        Date runTime = evenMinuteDate(new Date());



        log.info("------- Scheduling Job  -------------------");



        // define the job and tie it to our HelloJob class

        JobDetail job = newJob(HelloJob.class)

            .withIdentity("job1", "group1")

            .storeDurably() 

            .build();

        

        // Trigger the job to run on the next round minute

        Trigger trigger = newTrigger()

            .withIdentity("trigger1", "group1")

            .startNow()

            .forJob(job)

            .withSchedule(SimpleScheduleBuilder.simpleSchedule().repeatForever().withIntervalInSeconds(2))

            .build();



        Trigger trigger2 = newTrigger()

                .withIdentity("trigger2", "group2")

                .startNow()

                .withSchedule(SimpleScheduleBuilder.simpleSchedule().repeatForever().withIntervalInSeconds(5))

                .forJob(job)

                .build();

        

        // Tell quartz to schedule the job using our trigger

        sched.addJob(job, true);

        sched.scheduleJob(trigger);

        sched.scheduleJob(trigger2);

        

        log.info(job.getKey() + " will run at: " + runTime);  



        // Start up the scheduler (nothing can actually run until the 

        // scheduler has been started)

        sched.start();



        log.info("------- Started Scheduler -----------------");



        // wait long enough so that the scheduler as an opportunity to 

        // run the job!

        log.info("------- Waiting 65 seconds... -------------");

        try {

            // wait 65 seconds to show job

            Thread.sleep(65L * 1000L); 

            // executing...

        } catch (Exception e) {

        }



        // shut down the scheduler

        log.info("------- Shutting Down ---------------------");

        sched.shutdown(true);

        log.info("------- Shutdown Complete -----------------");

    }



    public static void main(String[] args) throws Exception {



        SimpleExample example = new SimpleExample();

        example.run();

    }

}

Job을 구성할 때는 반드시 설정해야 합니다.storeDurably () 는 스케줄러 엔진에 Job을 추가할 때 이상을 던집니다.
Exception in thread "main" org.quartz.SchedulerException: Jobs added with no trigger must be durable.

    at org.quartz.core.QuartzScheduler.addJob(QuartzScheduler.java:916)

    at org.quartz.impl.StdScheduler.addJob(StdScheduler.java:269)

    at com.gary.operation.jobdemo.demo1.SimpleExample.run(SimpleExample.java:88)

    at com.gary.operation.jobdemo.demo1.SimpleExample.main(SimpleExample.java:119)

그리고 Job과 Trigger를 엔진에 넣으면 됩니다.
sched.addJob(job, true);

sched.scheduleJob(trigger);

sched.scheduleJob(trigger2);

 
하나의 작업 JOB는 여러 개의 Trigger를 추가할 수 있지만 하나의 Trigger는 한 개의 JOB만 연결할 수 있다는 점에 주의해야 한다

좋은 웹페이지 즐겨찾기