【SpringBoot总结】6. SpringBoot整合Quartz实现定时调度任务

Quartz简介

1. 简介
起初是OpenSymphony组织提供的一个功能丰富的开源作业调度框架
官网:http://www.quartz-scheduler.org/
纯java编写,用法简单而功能强大

2. 特点
1.、强大的作业调度功能
作为Spring默认的调度框架,极易与Spring无缝整合,实现灵活可配置的调度功能,Quartz提供了调 度运行环境持久化机制,可以保存并恢复调度现场,即使系统因故障关闭也不会造成调度现场的数据丢失。
2、 灵活的应用方式
允许我们灵活定义触发器的调度时间规则,并可以将触发器与任务进行关联绑定,Quartz提供了主键式的监听器,各种插件以及线程池等功能,支持任务和调度的多重组合,支持调度数据的多种存储方式。
3、 分布式和集群能力
Quartz 集群中的每个节点是一个独立的 Quartz 应用,需要对每个节点分别启动或停止。不像许多应用服务器的集群,独立的 Quartz 节点并不与其他的节点或是管理节点通信。Quartz 应用是通过数据库表来感知到另一应用的。
3. 核心结构

  • job(或task)是实现定时功能的接口:如定时推送消息等。
  • trigger是触发执行定时任务的触发器,基本设置有:指定job的运行时间,时间间隔,运行次数等。
  • schedule是调度指定的trigger去执行指定的job。
    在这里插入图片描述

整合步骤

1、集成quartz的两种方式说明
Spring使用Quartz大致有2种方式:一是任务类继承QuartzJobBean,二是在xml文件里定义任务类和要执行的方法,为了简化配置和快速开发,一般使用第一种较多。

2、pom.xml添加依赖:

<!--定时任务quartz-->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>

3、定义任务类

// 继承QuartzJobBean,重写excuteInternal方法
@Component
public class HelloTask extends QuartzJobBean {

    private static final Logger logger = LoggerFactory.getLogger(HelloTask.class);

    @Override
    protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
        //  这里写调用执行定时调度任务的逻辑
        logger.info("------天青色等烟雨-------" + new Date());
    }
}

4、定义配置类
在配置类中定义JobDetail和SimpleTrigger。

@Configuration
public class TaskConfig {

    // 定义要执行的HelloTask任务类
    @Bean
    public JobDetail helloJobDetail() {
        return JobBuilder.newJob(HelloTask.class).withIdentity("hellohello").storeDurably().build();
    }

    // Simple触发器定义与设置
    @Bean
    public SimpleTrigger sayHelloBySimpleTrigger(){
        // Simple类型:可设置时间间隔、是否重复、触发频率(misfire机制)等
        SimpleScheduleBuilder ssb = SimpleScheduleBuilder.simpleSchedule()
                .withIntervalInSeconds(5).repeatForever();

        // 一个Trigger只对应一个Job,Schedule调度器调度Trigger执行对应的Job
        SimpleTrigger sTrigger = TriggerBuilder.newTrigger().forJob(helloJobDetail()).
                withIdentity("helloSimpleTrigger").withDescription("simple类型的触发器").withSchedule(ssb).build();
        return sTrigger;
    }
}

当然,上面是一个简单的触发器SimpleTrigger ,经常使用的还有CronTrigger。

// Cron触发器定义与设置
    @Bean
    public CronTrigger sayHelloByCronTrigger(){
        // Cron类型:通过cron表达式设置触发规则
        CronScheduleBuilder csb = CronScheduleBuilder.cronSchedule(String.format("0 */1 * * * ?"))
                .withMisfireHandlingInstructionDoNothing();

        // 一个Trigger只对应一个Job,Schedule调度器调度Trigger执行对应的Job
        CronTrigger cTrigger = TriggerBuilder.newTrigger().forJob(helloJobDetail()).
                withIdentity("helloCronTrigger").withDescription("corn类型的触发器").withSchedule(csb).startNow().build();
        return cTrigger;
    }

5、测试一下

启动DemoApplication,观察控制台输出
SimpleTrigger设置的是5秒执行一次:
在这里插入图片描述
CronTrigger设置的是一分钟执行一次:
在这里插入图片描述

总结一下

集成Quartz和使用它是很简单的,抓住Job,Trigger,Schedule三大核心对象就可以玩转Quartz了。

另外corn表达式也是经常会用的一个点,有关corn的组成规则,线上验证工具可以参考下面的路径:

  1. corn学习可参考:https://blog.csdn.net/weixin_40426638/article/details/78959972
  2. 在线生成corn表达式工具:http://cron.qqe2.com/
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值