Quartz学习笔记(一)—— Job和SimpleTrigger

本文介绍了Quartz定时任务的核心模块,包括Scheduler、Job、Trigger等,并通过示例展示了如何定义和执行定时任务,同时提供了使用JobDataMap传递数据的方法。

Quartz 主要模块

Scheduler 与调度器的主要API进行交互

Job 实现想要的调度器的组件

Trigger 将执行一个给定的工作时间表的组件

JobBuilder 用于定义/构建JobDetail实例

TriggerBuilder 用于定义/构建触发实例

JobDataMap 可以用来保存任何数量的数据对象(序列化),

JobDataMap JavaMap接口的一个实现,并且有一些添加便利的方法来存储和检索数据的原始类型


HelloWorld版的简单Job

public class HelloJob implements Job {

    public HelloJob() {
    }

    public void execute(JobExecutionContext context)
      throws JobExecutionException{

      System.err.println("Hello!  HelloJob is executing.");

    }
}

创建带getter/setter方法的Job

 /**
* 创建带getter/setter的Job
*/
public class DumbJob implements Job {

    String jobSays;
    float myFloatValue;

    public DumbJob() {

    }

    public void execute(JobExecutionContext context)
      throws JobExecutionException{

          //groupName.jobName
          JobKey key = context.getJobDetail().getKey();
          //序列化对象
//        JobDataMap dataMap = 
                    context.getJobDetail().getJobDataMap();                   
//        String jobSays = dataMap.getString("jobSays");
//        float myFloatValue = dataMap.getFloat("myFloatValue");
          //获得get/set属性
          JobDataMap dataMap = context.getMergedJobDataMap(); 

          String jobSays = dataMap.getString("jobSays");
          float myFloatValue = dataMap.getFloat("myFloatValue");

          System.err.println("Instance " + key + " of DumbJob says: " + jobSays + ", and val is: " + myFloatValue);

    }

    public String getJobSays() {
        return jobSays;
    }

    public void setJobSays(String jobSays) {
        this.jobSays = jobSays;
    }

    public float getMyFloatValue() {
        return myFloatValue;
    }

    public void setMyFloatValue(float myFloatValue) {
        this.myFloatValue = myFloatValue;
    }

 }

简单的运行Job

public static void main(String[] args) {

            try {
                // 创建定时器
                Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();

                // 启动定时器
                scheduler.start();

                //定义一个Job
                JobDetail job = newJob(HelloJob.class)
                          .withIdentity("myJob", "FirstGroup") //创建工作组
                          .build();

//              JobDetail job = newJob(HelloJob.class)
//                              .withIdentity("myJob") //创建工作组
//                              .build();

//              JobDetail job = newJob(DumbJob.class)
//                        .withIdentity("myJob", "FirstGroup") // name "myJob", group "group1"
//                        .usingJobData("jobSays", "Hello World!")
//                        .usingJobData("myFloatValue", 3.141f)
//                        .build();

                //设置Calendar
//              HolidayCalendar cal = new HolidayCalendar();
//              cal.addExcludedDate( new Date() );
//
//              scheduler.addCalendar("myHolidays", cal, false, false);

//              Trigger trigger = newTrigger()
//                .withIdentity("helloTrigger", "FirstGroup")
//                .startNow() //触发
//                .withSchedule(simpleSchedule()
//                                            .withIntervalInSeconds(40) //设置运行间隔
//                                            .repeatForever())      
//                .withPriority(1) //多个触发器时,设置优先级
//                .build();

//              Trigger trigger = newTrigger()
//                      .withIdentity("myTrigger")
//                      .forJob("myJob")
//                      .withSchedule(dailyAtHourAndMinute(9, 40)) 
//                      .modifiedByCalendar("myHolidays") 
//                      .build();

//              SimpleTrigger trigger = (SimpleTrigger) newTrigger()
//                      .withIdentity("myTrigger", "FirstGroup")
//                      .startAt(futureDate(5, IntervalUnit.SECOND)) // 未来的5s钟内触发(今一次)
//                      .forJob("myJob", "FirstGroup") // identify job with name, group strings
//                      .build();

//              SimpleTrigger trigger = newTrigger()
//                      .withIdentity("myTrigger", "FirstGroup")
//                      .withSchedule(simpleSchedule()
//                          .withIntervalInSeconds(5) //间隔5s重复执行
//                          .repeatForever())
//                      .endAt(dateOf(9, 55, 0)) //直到xx点xx分xx秒停止执行
//                      .build();

                SimpleTrigger trigger = newTrigger()
                        .withIdentity("myTrigger") 
                        .startAt(evenHourDate(null)) // 到下一小时开始  (minutes and seconds zero ("00:00"))
                        .withSchedule(simpleSchedule()
                            .withIntervalInHours(2) //间隔2小时执行一次
                            .repeatForever()) //永远重复
                        .build();

//                  SimpleTrigger trigger = newTrigger()
//                      .withIdentity("myTrigger", "FirstGroup")
//                      .withSchedule(simpleSchedule()
//                          .withIntervalInSeconds(5)
//                          .repeatForever()
//                          .withMisfireHandlingInstructionNextWithExistingCount())
//                      .build();

                //用trigger告诉quartz安排job
                scheduler.scheduleJob(job, trigger);

                // 如果不关闭定时器,不会自动终止 
                //scheduler.shutdown();

            } catch (SchedulerException se) {
                se.printStackTrace();
            }
        }

SimpleTrigger常量失败指令

MISFIRE_INSTRUCTION_IGNORE_MISFIRE_POLICY
MISFIRE_INSTRUCTION_FIRE_NOW
MISFIRE_INSTRUCTION_RESCHEDULE_NOW_WITH_EXISTING_REPEAT_COUNT
MISFIRE_INSTRUCTION_RESCHEDULE_NOW_WITH_REMAINING_REPEAT_COUNT
MISFIRE_INSTRUCTION_RESCHEDULE_NEXT_WITH_REMAINING_COUNT
MISFIRE_INSTRUCTION_RESCHEDULE_NEXT_WITH_EXISTING_COUNT
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值