SpringBoot配置多个Quartz定时任务

SpringBoot利用配置文件配置多个Quartz定时任务执行


前言

很久之前使用过数据库的定时任务,如今换用了后端框架中的定时器,本篇介绍的就是Quartz,当然网上教程很多,在这里就简单配2个定时任务来保存回忆


一、导入依赖

来引入一些jar包,这里是采用maven引入,其实引入了springboot的jar包就可以了,其中已经包含。自定义引入需要注意版本

<dependency>
    <groupId>org.quartz-scheduler</groupId>
    <artifactId>quartz</artifactId>
</dependency>

二、配置文件

看下需要什么文件
在这里插入图片描述
在这里插入图片描述

1.config配置文件

我们可以利用config来替代xml配置文件,其实也还简单,可以在其中配置多个定时任务

@Configuration
public class QuartzConfig {

	/**
     * 配置定时任务1的任务实例
     * @param  job 任务
     */
    @Bean(name = "firstJobDetail")
    public MethodInvokingJobDetailFactoryBean firstJobDetail(QuartzTest job) {
        MethodInvokingJobDetailFactoryBean jobDetail = new MethodInvokingJobDetailFactoryBean();
        // 是否并发执行
        jobDetail.setConcurrent(false);
        // 为需要执行的实体类对应的对象
        jobDetail.setTargetObject(job);
        // 需要执行的方法
        jobDetail.setTargetMethod("JobTest");
        return jobDetail;
    }

    // 配置触发器1
    @Bean(name = "firstTrigger")
    public SimpleTriggerFactoryBean firstTrigger(JobDetail firstJobDetail) {
        SimpleTriggerFactoryBean trigger = new SimpleTriggerFactoryBean();
        trigger.setJobDetail(firstJobDetail);
        // 设置任务启动延迟
        trigger.setStartDelay(0);
        // 设置定时任务启动时间
        trigger.setStartTime(new Date());
        // 每5秒执行一次
        trigger.setRepeatInterval(5000);
        return trigger;
    }


    /**
     * 配置定时任务2的任务实例
     * @param  job 任务
     */
    @Bean(name = "secondJobDetail")
    public MethodInvokingJobDetailFactoryBean secondJobDetail(QuartzJob job) {
        MethodInvokingJobDetailFactoryBean jobDetail = new MethodInvokingJobDetailFactoryBean();
        // 是否并发执行
        jobDetail.setConcurrent(true);
        // 为需要执行的实体类对应的对象
        jobDetail.setTargetObject(job);
        // 需要执行的方法
        jobDetail.setTargetMethod("JobQuartz");
        return jobDetail;
    }

    // 配置触发器2
    @Bean(name = "secondTrigger")
    public CronTriggerFactoryBean secondTrigger(JobDetail secondJobDetail) {
        CronTriggerFactoryBean trigger = new CronTriggerFactoryBean();
        trigger.setJobDetail(secondJobDetail);
        // 设置定时任务启动时间
        trigger.setStartTime(new Date());
        // cron表达式
		// trigger.setCronExpression("*/5 * * * * ?"); // 5秒一执行
        trigger.setCronExpression("0 0 10 * * ?"); // 每天10点执行
        return trigger;
    }

    // 定义 任务,传入 triggers
    @Bean
    public SchedulerFactoryBean scheduler1(Trigger... triggers){
        SchedulerFactoryBean factoryBean = new SchedulerFactoryBean();
        // 设置 triggers
        factoryBean.setTriggers( triggers );
        // 用于quartz集群,QuartzScheduler 启动时更新己存在的Job
        factoryBean.setOverwriteExistingJobs(true);
        // 延时启动,应用启动3秒后
        factoryBean.setStartupDelay(3);
        return factoryBean;
    }
}

以上需要注意的是QuartzTest和QuartzJob都是我们自己创建的类,JobTest和JobQuartz分别是两个类中的方法,而方法内部写我们的业务逻辑即可

2.定时任务类

这里我创建了两个类

package com.xxx.xx.x.quartz;

import org.springframework.context.annotation.Configuration;

import java.text.SimpleDateFormat;
import java.util.Date;

@Configuration
public class QuartzTest {

    public void JobTest(){
        
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println(sdf.format(new Date()));
        
    }

}

然后控制台就会5s一输出时间了,因为这是第一个定时任务,我们设置的是5s一执行
在这里插入图片描述

3.cron表达式

附上一些可能用得到的cron表达式例子

0 * * * * ? 每1分钟触发一次
0 0 * * * ? 每天每1小时触发一次
0 0 10 * * ? 每天10点触发一次
0 * 14 * * ? 在每天下午2点到下午2:59期间的每1分钟触发
0 30 9 1 * ? 每月1号上午9点半
0 15 10 15 * ? 每月15日上午10:15触发

*/5 * * * * ? 每隔5秒执行一次
0 */1 * * * ? 每隔1分钟执行一次
0 0 5-15 * * ? 每天5-15点整点触发
0 0/3 * * * ? 每三分钟触发一次
0 0-5 14 * * ? 在每天下午2点到下午2:05期间的每1分钟触发
0 0/5 14 * * ? 在每天下午2点到下午2:55期间的每5分钟触发
0 0/5 14,18 * * ? 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发
0 0/30 9-17 * * ? 朝九晚五工作时间内每半小时
0 0 10,14,16 * * ? 每天上午10点,下午2点,4点

0 0 12 ? * WED 表示每个星期三中午12点
0 0 17 ? * TUES,THUR,SAT 每周二、四、六下午五点
0 10,44 14 ? 3 WED 每年三月的星期三的下午2:10和2:44触发
0 15 10 ? * MON-FRI 周一至周五的上午10:15触发

0 0 23 L * ? 每月最后一天23点执行一次
0 15 10 L * ? 每月最后一日的上午10:15触发
0 15 10 ? * 6L 每月的最后一个星期五上午10:15触发


总结

其实看了下,确实大家只要试一试都能直接用了,不过还是挺方便的哈

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值