Quartz任务调度的单元测试

#前言
  通过Threa.currentThread.sleep()方法让主线程睡眠一段时间,使调度器可以继续执行任务调度的工作;否则在调度器启动后,因为主线程立即退出,寄生于主线程的调度器也立即关闭,调度器中的任务都将相应销毁,这将导致看不到实际的运行效果。
  在单元测试时,使主线程睡眠一段时间以便让任务线程不被提前终止是经常使用的测试方法。

#源代码

import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;
import org.testng.annotations.Test;

import java.util.Collection;
import java.util.Date;

public class SimpleTriggerRunnerTest {

@Test(enabled = true)
public void testSimpleTriggerRunnerTest(){
    // 创建一个JobDetail实例,指定SimpleJob
    JobDetail jobDetail = new JobDetail("job1_1", "jobgroup_1", SimpleJob.class);

    /*// 通过SimpleTrigger启动调度规则:立即启动,重复一百次,每次间隔2秒
    SimpleTrigger simpleTrigger = new SimpleTrigger("trigger1_1", "tgroup1");
    simpleTrigger.setStartTime(new Date(System.currentTimeMillis() + 60000L));
    simpleTrigger.setRepeatCount(100);
    simpleTrigger.setRepeatInterval(2000);*/

    /**
     * 利用org.quartz.TriggerUtils工具类创建Trigger实例
     */
    SimpleTrigger simpleTrigger = (SimpleTrigger) TriggerUtils.makeImmediateTrigger(100, 2000);
    simpleTrigger.setName("trigger1_1");
    simpleTrigger.setGroup("jobgroup_1");

    // 通过SchedulerFactory获取一个调度实例
    SchedulerFactory schedulerFactory = new StdSchedulerFactory();
    Scheduler scheduler = null;
    try {
        scheduler = schedulerFactory.getScheduler();

        // 注册进行调度,启动调度
        scheduler.scheduleJob(jobDetail, simpleTrigger);
        scheduler.start();
        // 让主线程睡眠60秒
        Thread.currentThread().sleep(60000);
    } catch (SchedulerException e) {
        e.printStackTrace();
    }catch (InterruptedException e) {
        e.printStackTrace();
    }

}

}

你可能感兴趣的:(Project,In,Action)