定时任务组件Quartz和Corn表达式详解

一、Quartz介绍

quartz(开源项目)

Quatz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jbs这样复杂的程序。Jobs可以做成标准的Java组件或EJBs。Quartz的最新版本为Quartz 2.3.0。

官网:http://www.quartz-scheduler.org/ 

二、Quartz框架的使用思路

1)job - 任务 - 你要做什么事?

2)Trigger - 触发器 - 你什么时候去做?

3)Scheduler - 任务调度 - 你什么时候需要去做什么事?

定时任务组件Quartz和Corn表达式详解_第1张图片

 三、SpringBoot整合Quartz框架

pom.xml文件添加依赖:


    org.springframework.boot
    spring-boot-starter-web


    org.springframework.boot
    spring-boot-starter-quartz

1.自定义一个Job

/**
 * 任务类
 */
@Component
public class QuartzDemo{

    //任务
    @Override
    public void printTime() throws JobExecutionException {
        System.out.println("现在时刻:"+new Date());
    }
}

2.编写quartz配置类

@Configuration
public class QuartzConfig {

    @Bean//job:干什么事
    public MethodInvokingJobDetailFactoryBean methodInvokingJobDetailFactoryBean(
            QuartzDemo quartzDemo){
        MethodInvokingJobDetailFactoryBean JobDetailFactoryBean = new 
            MethodInvokingJobDetailFactoryBean();
        JobDetailFactoryBean.setTargetObject(clearImgJob);
        JobDetailFactoryBean.setTargetMethod("printTime");
        return JobDetailFactoryBean;
    }

    @Bean//trigger:什么时候
    public CronTriggerFactoryBean cronTriggerFactoryBean(
        MethodInvokingJobDetailFactoryBean JobDetailFactoryBean){
        CronTriggerFactoryBean triggerFactoryBean = new CronTriggerFactoryBean();
        triggerFactoryBean.setCronExpression("0/1 * * * * ?");
        triggerFactoryBean.setJobDetail(JobDetailFactoryBean.getObject());
        return triggerFactoryBean;
    }

    @Bean//scheduler:什么时候干什么事
    public SchedulerFactoryBean schedulerFactoryBean(
        CronTriggerFactoryBean triggerFactoryBean){
        SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean();
        schedulerFactoryBean.setTriggers(triggerFactoryBean.getObject());
        return schedulerFactoryBean;
    }
}

 3.编写启动类

@SpringBootApplication
public class QuartzTestApp {

    public static void main(String[] args) {
        SpringApplication.run(QuartzTestApp.class,args);
    }
}

查看控制台 

 

定时任务组件Quartz和Corn表达式详解_第2张图片

运行启动类,观察控制台,可以发现每隔1秒会输出一次,说明每隔1秒自定义 Job被调用一次。 

四、Corn表达式

 

Cron 表达式是一个字符串,分为 6 7 个域,每一个域代表一个含义

Cron 有如下两种语法格式:

(1)Seconds Minutes Hours Day Month Week Year

(2)Seconds Minutes Hours Day Month Week

1.结构

corn 从左到右(用空格隔开):秒 分 小时 月份中的日期 月份 星期中的日期 年份

2.cron表达式

定时任务组件Quartz和Corn表达式详解_第3张图片

 字段含义:

定时任务组件Quartz和Corn表达式详解_第4张图片

示例: 

定时任务组件Quartz和Corn表达式详解_第5张图片

? 

“?”字符只在日期域和星期域中使用。它被用来指定非明确的值

例如:

        想在每月的20日触发调度0 0 0 20 * ?,而且只能使用如下写法:0/1 0 0 20 * ?。其中最后一位只能用?,而不能使    *,因为*表示不管星期几都会触发恰好与20冲突。

五、Cron表达式在线生成器

前面介绍了cron表达式,但是自己编写表达式还是有一些困难的,我们可以借助一些 cron表达式在线生成器来根据我们的需求生成表达式即可。

在线Cron表达式生成器

你可能感兴趣的:(Java,java)