转载

学习 Spring Boot(十一):集成 Quartz 调度定时任务

Quartz 任务调度库,支持丰富的调度规则

概念

  • Trigger 代表了调度的时机
  • JobDetail 代表了调度的任务
  • Scheduler 代表了在 Trigger 指定的时机调度 JobDetail 指定的任务

以“每天早上六点半叫我起床”为例,“每天早上六点半”对应着 Trigger,“叫我起床”对应着 JobDetail,而:alarm_clock:对应着 Scheduler

依赖与配置

首先,编辑 pom.xml 文件添加依赖:

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

然后,编辑 application.yml 文件添加配置:

spring:  
  datasource:
    name: mysql
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://MYSQL_HOST:3306/app?useUnicode=true&characterEncoding=utf-8
    username: USER
    password: PASS
  quartz:
    job-store-type: jdbc

属性 spring.quartz.job-store-type 定义了 JobStore 的类型,默认值为 memory 存储在内存中(易失),可选配置为 jdbc 存储在 spring.datasource 配置的数据源中(非易失)

最后,创建 JDBC 依赖的表

在 org.quartz.impl.jdbcjobstore 包下找到 tables_mysql_innodb.sql 文件,执行该 SQL 文件

Trigger

Quartz 提供了构建器 TriggerBuilder 可以帮助我们方便得创建 Trigger 实例

Trigger 的几个关键属性:

  • TriggerKey 在 Scheduler 中用于唯一标识 Trigger,由 name 和 group 组成,group 不指定默认为 TriggerKey.DEFAULT_GROUP
  • 开始时间,Trigger 从何时开始生效
  • 结束时间,Trigger 从何时开始失效
  • ScheduleBuilder,Trigger 调度规则

ScheduleBuilder 有以下四个子类:

  • CalendarIntervalScheduleBuilder
  • CronScheduleBuilder
  • DailyTimeIntervalScheduleBuilder
  • SimpleScheduleBuilder

CalendarIntervalScheduleBuilder

CalendarIntervalScheduleBuilder 定义了以秒、分钟、小时、天、周、月和年为周期的调度规则

withIntervalInSeconds(10); // 每 10 秒  
withIntervalInDays(3); // 每 3 天

CronScheduleBuilder

CronScheduleBuilder 定义了基于 Cron 表达式的调度规则

cronSchedule("0 */10 * ? * *"); // 每 10 分钟

这里有一个在线生成 Cron 表达式的网站,可以参考: CronMaker

DailyTimeIntervalScheduleBuilder

TODO

SimpleScheduleBuilder

TODO

JobDetail

Quartz 提供了构建器 JobBuilder 可以帮助我们方便得创建 JobDetail 实例

Scheduler

使用 spring-boot-starter-quartz 通过依赖注入即可使用 Scheduler,看:point_down:的:chestnut::

@Autowired
private Scheduler scheduler;

如果想修改 Quartz 属性,可以通过修改 application.yaml 的 spring.quartz.properties 实现,详细配置参数,参考: Quartz 2.2.x Configuration Reference

原文  http://dyingbleed.com/spring-boot-11/
正文到此结束
Loading...