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

发布时间:2024年01月24日

一、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 - 任务调度 - 你什么时候需要去做什么事?

?三、SpringBoot整合Quartz框架

pom.xml文件添加依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-quartz</artifactId>
</dependency>

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);
    }
}

查看控制台?

?

运行启动类,观察控制台,可以发现每隔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表达式

?字段含义:

示例:?

??

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

例如:

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

五、Cron表达式在线生成器

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

在线Cron表达式生成器

文章来源:https://blog.csdn.net/ughbnbjkk/article/details/135786749
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。