Quartz技术简介

Quartz是什么:

        Quartz是目前流行的一种高效的任务调用管理工具,由OpenSymphony开源组织开发,是 Java编写的。

        所谓任务调度就是执行,就是执行某些的动作的时间计划。

Quartz的核心组件:

 Job(工作):Quartz 实现过程中是一个接口,接口中有一个方法execute(执行的意思)。

Scheduler(调度器 ):一个可以规定哪个触发器绑定哪个job的容器,在调度器中保存全部的Quartz 保存的任务,SpringBoot框架下,添加Quartz依赖后,调度器由SpringBoot管理,我们不需要编写。

Trigger(触发器):能够描述触发指定job的规则,分为简单触发和复杂触发,简单触发可以使用SimplTrigger实现类.功能类似timer,复杂触发可以使用CronTrigger实现类,内部利用cron表达式描述各种复杂的时间调度计划。

cron表达式:

 

  • * 表示任何值,如果在分的字段上编写*,表示每分钟都会触发

  • , 是个分割符如果秒字段我想20秒和40秒时触发两次就写 20,40

  • - 表示一个区间 秒字段5-10 表示 5,6,7,8,9,10

  • / 表示递增触发 秒字段 2/10表示2秒开始每隔10秒触发一次,日字段编写1/4表示从每月1日起每隔4天触发一次

  • ? 表示不确定值,因为我们在定日期时,一般确定日期就不确定是周几,相反确定周几时就不确定日期

  • L 表示last最后的意思,我们可以设置当月的最后一天,就会在日字段用L表示,周字段使用L表示最后一周,一般会和1-7的数字组合,例如6L表示本月最后一周的周五

  • W 表示最近的工作日(单纯的周一到周五) 如果日字段编写15W表示,每月15日最近的工作日触发,如果15日是周六就14日触发,如果15日是周日就16日触发,LW通常一起使用,表示本月的最后一个工作日

  • # 表示第几个,只能使用在周字段上 6#3表示每月的第三个周五,如果#后面数字写大了,是一个不存在的日期,那就不运行了,适合设计在母亲节或父亲节这样的日期运行

 Quartz在SpringBoot框架中的使用:

1>、Quartz依赖添加:

<!--  SpringBoot Quartz依赖  -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-quartz</artifactId>
</dependency>

2>、创建QuartzJob的类,实现Job接口

public class QuartzJob implements Job {
    
    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        //输出当前时间
        System.out.println(LocalDateTime.now());
    }
}

3>、创建QuartzConfig类,该类为SpringBoot配置类,配置Quartz调度器(该模块代码是固定格式)

// 这个配置类就是在配置已经保存在Spring容器中的调度器Scheduler
// 我们需要按下面格式进行配置,才能让Scheduler正常工作
@Configuration
public class QuartzConfig {
    // 创建一个JobDetail(工作详情)类对象,保存到Spring容器中,这个类用于封装我们编写的job接口实现类
    // @Bean注解标记的方法的返回值会自动保存到Spring容器中(方法名随意)
    @Bean
    public JobDetail showTime(){
        System.out.println("showTime方法运行");
        return JobBuilder.newJob(QuartzJob.class)   // 绑定要运行的任务类的反射
                .withIdentity("date")               // 设置这个job的名称
                .storeDurably()                     //
                .build();
    }

    // 下面要声明触发器,Trigger,触发器决定我们的工作\任务何时触发
    @Bean
    public Trigger showTimeTrigger(){
        System.out.println("showTime触发器运行");
        // 定义Cron表达式   每分钟触发一次的定义
        CronScheduleBuilder cronScheduleBuilder=
                CronScheduleBuilder.cronSchedule("0 0/1 * * * ?");
        return TriggerBuilder.newTrigger()
                .forJob(showTime())        // 绑定JobDetail JobDetail对象已经在Spring容器中
                .withIdentity("dateTrigger")       // 定义触发器名称
                .withSchedule(cronScheduleBuilder) // 绑定Cron表达式
                .build();
    }

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值