Quartz 分布式定时任务

Quartz 提供了一种基于数据库的分布式任务解决方案。

Quartz 源码下载地址

所需jar包

Quartz 分布式定时任务_第1张图片

详细的配置可以参考官方网站:http://www.quartz-scheduler.org/documentation/quartz-2.2.x/configuration/

quartz 常用接口

接口名称 说明
Job 执行任务调度的组件要实现的接口
JobDetail 用来定义Job的实例
JobBuilder 用来定义或创建JobDetail的实例
Tigger 定义一个Job何时被执行的组件,也称触发器
TriggerBuilder 用来创建Tigger的实例
Scheduler 跟任务调度相关的接口

 

quartz主要有三个概念

(1)任务调度器Scheduler 

SchedulerFactory sf = new StdSchedulerFactory();
Scheduler sched = sf.getScheduler();

Scheduler schedule = StdSchedulerFactory.getDefaultScheduler();

(2)任务触发器Trigger

Trigger tri = TriggerBuilder.newTrigger().build;

(3)任务Job

JobBuilder.newJob(MyJob.class).build();
Cron表达式:
格式:秒 分 时 日 月  星期几 年(可选)

位置 字段定义 范围 允许的特殊字符
1 0~59 ,_*/
2 分钟 0~59 ,_*/
3 小时 0~23 ,_*/
4 月份中的哪一天 1~31 ,_*?/LWC
5 月份 1~12或JAN~DEC ,_*/
6 星期几 1~7或SUN~SAT ,_*?/LC#
7 年份 1970~2099 ,_*/


1:?只能用在日或星期几的域上
2:分隔符[",","-","/","*"];eg:在分钟域使用12/15(从12分开始每隔15分钟触发)
3: 星期(1-7)
4:日跟星期的域不能是互斥的,不能同时使用
5:完整的例子:0 15,25,35 9-17 ? * 6 2017-2018 = 2017年和2018年的6月份每天9点到17点分钟刻度为15或25或35时触发

demo

public class JobDemo1 implements Job{
    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException {
       JobKey jobKey = context.getJobDetail().getKey();  
        System.out.println("任务id>>>>>>>>>>>>>>>"+jobKey);
        for(int i=0;i<5;i++) {
                System.out.println("i am a superman");
        }
    }
}

public static void main(String[] args) throws SchedulerException, ParseException {

    try {
            Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
            JobDetail jobdetail = JobBuilder.newJob(JobDemo1.class).withIdentity("任务名字")

                  //传值
                .usingJobData("name", "张三").build();
            Trigger trigger = TriggerBuilder.newTrigger() 
                    .withIdentity("触发器名字")
                    .withSchedule(SimpleScheduleBuilder.simpleSchedule()
                    .withIntervalInSeconds(5).withRepeatCount(3))
                    .build();
            scheduler.scheduleJob(jobdetail, trigger);
            scheduler.start();
        } catch (SchedulerException se) {
            se.printStackTrace();
        }

}


 

 

你可能感兴趣的:(Quartz 分布式定时任务)