博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Quartz--Trigger
阅读量:5238 次
发布时间:2019-06-14

本文共 7251 字,大约阅读时间需要 24 分钟。

Trigger

Quartz中的触发器,用来告诉调度程序什么时候触发,即Trigger对象是用来触发Job的

 

触发器通用属性

JobKey
StartTime
EndTime
JobKey
表示job实例的表示.触发器被触发时,该指定的job实例会执行

StartTime 表示触发器额时间表首次被触发的时间

他的值的类型是Java.util.Date

EndTime

指定触发器的不再被触发的时间
他的值的类型是Java.util.Date

 

trigger通过builder模式创建

 

 

package cn.miye.web;import java.text.SimpleDateFormat;import java.util.Date;import org.quartz.Job;import org.quartz.JobExecutionContext;import org.quartz.JobExecutionException;import org.quartz.JobKey;import org.quartz.Trigger;public class HelloJob implements Job {    @Override    public void execute(JobExecutionContext context) throws JobExecutionException {        // 打印当前时间        Date date = new Date();        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");        System.out.println("当前时间:" + sf.format(date));        Trigger currentTrigger = context.getTrigger();        System.out.println("任务开始时间:"+sf.format(currentTrigger.getStartTime()));        System.out.println("任务结束时间:"+sf.format(currentTrigger.getEndTime()));        JobKey jobKey = currentTrigger.getJobKey();        System.out.println("JobKey的分组名称:"+jobKey.getGroup()+"JobKey的名称:"+jobKey.getName());    }}
package cn.miye.web;import java.text.SimpleDateFormat;import java.util.Date;import org.quartz.JobBuilder;import org.quartz.JobDetail;import org.quartz.Scheduler;import org.quartz.SchedulerException;import org.quartz.SchedulerFactory;import org.quartz.SimpleScheduleBuilder;import org.quartz.Trigger;import org.quartz.TriggerBuilder;import org.quartz.impl.StdSchedulerFactory;public class HelloScheduler {    public static void main(String[] args) throws SchedulerException {        // 打印当前时间        Date date = new Date();        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");        System.out.println("Current Exec Time Is:" + sf.format(date));        //获取距离当前时间3s之后的时间        date.setTime(date.getTime()+3000);//3s        //获取距离当前时间9s之后的时间        Date endDate = new Date();        endDate.setTime(endDate.getTime()+9000);        // 创建一个JobDetail实例,将该实例与HelloJobClass绑定        JobDetail jobDetail = JobBuilder.newJob(HelloJob.class)                .withIdentity("myJob", "group1")                .build();        // 创建一个Trigger实例,定义该job立即执行,并每隔两秒钟执行一次,直到程序停止        Trigger trigger = TriggerBuilder.newTrigger()                .withIdentity("mytrigger", "group1")                .startAt(date)//表示在date的时间开始执行                .endAt(endDate)//表示最后的执行时间                .withSchedule(SimpleScheduleBuilder.simpleSchedule()                .withIntervalInSeconds(2).repeatForever()).build();        // 创建Scheduler实例        SchedulerFactory sfact = new StdSchedulerFactory();        Scheduler scheduler = sfact.getScheduler();        scheduler.start();        scheduler.scheduleJob(jobDetail, trigger);    }}

 

子类

  

SimpleTrigger

  作用
  在一个指定时间段内执行一次作业任务
  或在指定的时间间隔内多次执行作业任务

package cn.miye.web;import java.text.SimpleDateFormat;import java.util.Date;import org.quartz.Job;import org.quartz.JobExecutionContext;import org.quartz.JobExecutionException;public class HelloJob implements Job {    @Override    public void execute(JobExecutionContext context) throws JobExecutionException {        // 打印当前时间        Date date = new Date();        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");        System.out.println("当前时间:" + sf.format(date));        System.out.println("Hello Word!");    }}

 

package cn.miye.web;import java.text.SimpleDateFormat;import java.util.Date;import org.quartz.JobBuilder;import org.quartz.JobDetail;import org.quartz.Scheduler;import org.quartz.SchedulerException;import org.quartz.SchedulerFactory;import org.quartz.SimpleTrigger;import org.quartz.TriggerBuilder;import org.quartz.impl.StdSchedulerFactory;public class HelloScheduler {    public static void main(String[] args) throws SchedulerException {        // 打印当前时间        Date date = new Date();        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");        System.out.println("Current Exec Time Is:" + sf.format(date));        //获取距离当前时间4s之后的时间        date.setTime(date.getTime()+4000L);//4s        // 创建一个JobDetail实例,将该实例与HelloJobClass绑定        JobDetail jobDetail = JobBuilder.newJob(HelloJob.class)                .withIdentity("myJob", "group1")                .build();        // 创建一个SimpleTrigger实例,在距离当前时间4s中后执行且只执行一次        SimpleTrigger trigger = (SimpleTrigger) TriggerBuilder.newTrigger()                .withIdentity("mytrigger", "group1")                .startAt(date)                .build();        // 创建Scheduler实例        SchedulerFactory sfact = new StdSchedulerFactory();        Scheduler scheduler = sfact.getScheduler();        scheduler.start();        scheduler.scheduleJob(jobDetail, trigger);    }}

 

//创建一个SimpleTrigger实例,在距离当前时间4s中后执行且每个两秒执行一次,执行3次SimpleTrigger trigger = (SimpleTrigger)TriggerBuilder.newTrigger().withIdentity("mytrigger", "group1")        .startAt(date)        .withSchedule(SimpleScheduleBuilder.simpleSchedule()                .withIntervalInSeconds(2).withRepeatCount(3)).build();

 

withRepeatCount(SimpleTrigger.REPEAT_INDEFINITELY)//执行无数次

 

 

CronTrigger

作用

基于日历的作业调度器
而不是像Simpletrigger 那样精确指定间隔时间,比SimpleTrigger更常用

(每月某天或者每周某天)

基于Cron表达式
Cron表达式
用于配置CronTrigger实例
是由7个子表达式组成的字符串,描述了时间表的详细信息
格式:[秒] [分] [时] [日] [月] [周] [年]

* 每

 

 

 

简单例子

package cn.miye.web;import java.text.SimpleDateFormat;import java.util.Date;import org.quartz.Job;import org.quartz.JobExecutionContext;import org.quartz.JobExecutionException;public class HelloJob implements Job {    @Override    public void execute(JobExecutionContext context) throws JobExecutionException {        // 打印当前时间        Date date = new Date();        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");        System.out.println("当前时间:" + sf.format(date));        System.out.println("Hello World");    }}

 

 

package cn.miye.web;import java.text.SimpleDateFormat;import java.util.Date;import org.quartz.CronScheduleBuilder;import org.quartz.CronTrigger;import org.quartz.JobBuilder;import org.quartz.JobDetail;import org.quartz.Scheduler;import org.quartz.SchedulerException;import org.quartz.SchedulerFactory;import org.quartz.TriggerBuilder;import org.quartz.impl.StdSchedulerFactory;public class HelloScheduler {    public static void main(String[] args) throws SchedulerException {        // 打印当前时间        Date date = new Date();        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");        System.out.println("Current Exec Time Is:" + sf.format(date));        // 创建一个JobDetail实例,将该实例与HelloJobClass绑定        JobDetail jobDetail = JobBuilder.newJob(HelloJob.class)                .withIdentity("myJob", "group1")                .build();        // 每年每周每月每天每时每分秒钟执行一次        CronTrigger trigger = (CronTrigger)TriggerBuilder                .newTrigger()                .withIdentity("mytrigger", "group1")                .withSchedule(                        CronScheduleBuilder.cronSchedule("* * * * * ? *"))                .build();        // 创建Scheduler实例        SchedulerFactory sfact = new StdSchedulerFactory();        Scheduler scheduler = sfact.getScheduler();        scheduler.start();        scheduler.scheduleJob(jobDetail, trigger);    }}

 

在线Cron表达式生成工具http://www.pdtools.net/tools/becron.jsp

转载于:https://www.cnblogs.com/miye/p/7248835.html

你可能感兴趣的文章
jquery的$(document).ready()和onload的加载顺序
查看>>
Python Web框架Django (五)
查看>>
.net学习之继承、里氏替换原则LSP、虚方法、多态、抽象类、Equals方法、接口、装箱拆箱、字符串------(转)...
查看>>
【codevs1033】 蚯蚓的游戏问题
查看>>
【程序执行原理】
查看>>
python的多行注释
查看>>
连接Oracle需要jar包和javadoc文档的下载
查看>>
UVA 10976 - Fractions Again?!
查看>>
Dreamweaver cc新版本css单行显示
查看>>
【android】安卓的权限提示及版本相关
查看>>
JavaScript可否多线程? 深入理解JavaScript定时机制
查看>>
IOS基础学习
查看>>
PHP 导出 Excell
查看>>
Java基础教程——网络基础知识
查看>>
自己到底要的是什么
查看>>
Kruskal基础最小生成树
查看>>
ubuntu 14.04 安装搜狗拼音输入法
查看>>
浅谈算法和数据结构: 一 栈和队列
查看>>
Java内部类详解
查看>>
【hdu 1429】胜利大逃亡(续)
查看>>