前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SpringBoot之整合Quartz调度框架-基于Spring Boot2.0.2版本

SpringBoot之整合Quartz调度框架-基于Spring Boot2.0.2版本

作者头像
Java小咖秀
修改2021-03-19 10:25:48
7790
修改2021-03-19 10:25:48
举报
文章被收录于专栏:Java冰冻三尺Java冰冻三尺

> 公众号:[Java小咖秀](https://t.1yb.co/jwkk),网站:[javaxks.com](https://www.javaxks.com)

> 作者 :瘦子没有夏天 ,链接: https://blog.csdn.net/weixin_39723544/article/details/83382000

### 一、引言

定时任务调度是Java开发中不可或缺的重要部分,但是Java自带的Time等任务调度类在实际项目中不好用。所以Quartz和Spring Task就成了我们项目开发技术选型最多的,在这里我们着重探讨一下Quartz在Spring Boot 2.X版本中的使用。

### 二、Quartz

#### 1. 介绍

Quartz是OpenSymphony开源组织在Job scheduling领域的开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的日程序表。Jobs可以做成标准的Java组件或 EJBs。

Quartz是一个任务日程管理系统,一个在预先确定(被纳入日程)的时间到达时,负责执行(或者通知)其他软件组件的系统。

Quartz用一个小Java库发布文件(.jar文件),这个库文件包含了所有Quartz核心功能。这些功能的主要接口(API)是Scheduler接口。它提供了简单的操作,例如:将任务纳入日程或者从日程中取消,开始/停止/暂停日程进度。

#### 2.安装配置

官方网站:官网

#### 3.设计架构

- 介绍

- Scheduler – 核心调度器

- Job – 任务

- JobDetail – 任务描述

- Trigger – 触发器

- 图示

![image.png](https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/ec6514f671f647d8b5f28e9f7b49bb24~tplv-k3u1fbpfcp-watermark.image)

多个定时的图示如下:

![image.png](https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/5429ec7ca24941d5ab52bdedbf476702~tplv-k3u1fbpfcp-watermark.image)

对比下配置xml中的配置:

```

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"

xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd

http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd

http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd

http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">

<!--

Spring整合Quartz进行配置遵循下面的步骤:

1:定义工作任务的Job

2:定义触发器Trigger,并将触发器与工作任务绑定

3:定义调度器,并将Trigger注册到Schedule

-->

<!-- 1:定义任务的bean ,这里使用JobDetailFactoryBean,也可以使用MethodInvokingJobDetailFactoryBean ,配置类似-->

<bean name="hwJob" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">

<!-- 指定job的名称 -->

<property name="name" value="hw_job"/>

<!-- 指定job的分组 -->

<property name="group" value="hw_group"/>

<!-- 指定具体的job类 -->

<property name="jobClass" value="com.dufy.spring.quartz.chapter01.job.HelloWorldJob"/>

<!-- 必须设置为true,如果为false,当没有活动的触发器与之关联时会在调度器中会删除该任务 -->

<property name="durability" value="true"/>

<!-- 指定spring容器的key,如果不设定在job中的jobmap中是获取不到spring容器的 -->

<property name="applicationContextJobDataKey" value="applicationContext"/>

</bean>

<!-- 2.1:定义触发器的bean,定义一个Simple的Trigger,一个触发器只能和一个任务进行绑定 -->

<!-- <bean name="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">

指定Trigger的名称

<property name="name" value="hw_trigger"/>

指定Trigger的名称

<property name="group" value="hw_trigger_group"/>

指定Tirgger绑定的Job

<property name="jobDetail" ref="hwJob"/>

指定Trigger的延迟时间 1s后运行

<property name="startDelay" value="1000"/>

指定Trigger的重复间隔 5s

<property name="repeatInterval" value="5000"/>

指定Trigger的重复次数

<property name="repeatCount" value="5"/>

</bean> -->

<!-- 2.2:定义触发器的bean,定义一个Cron的Trigger,一个触发器只能和一个任务进行绑定 -->

<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">

<!-- 指定Trigger的名称 -->

<property name="name" value="hw_trigger"/>

<!-- 指定Trigger的名称 -->

<property name="group" value="hw_trigger_group"/>

<!-- 指定Tirgger绑定的Job -->

<property name="jobDetail" ref="hwJob"/>

<!-- 指定Cron 的表达式 ,当前是每隔1s运行一次 -->

<property name="cronExpression" value="0/1 * * * * ?" />

</bean>

<!-- 3.定义调度器,并将Trigger注册到调度器中 -->

<bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">

<property name="triggers">

<list>

<!-- <ref bean="simpleTrigger"/> -->

<ref bean="cronTrigger"/>

</list>

</property>

<!-- <property name="autoStartup" value="true" /> -->

</bean>

</beans>

```

### 三、整合

#### 1.项目基础

项目是基于Spring Boot2.x版本的。

![image.png](https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/8cc422aa2a5e4413b48e767aad254a79~tplv-k3u1fbpfcp-watermark.image)

#### 2.添加依赖

```

<!-- quartz依赖 -->

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-quartz</artifactId>

</dependency>

```

#### 3.yml配置

![](https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/cb7e73785f084a5292bab8079b4d107c~tplv-k3u1fbpfcp-watermark.image)

application-quartz.yml的配置内容如下

```

spring:

quartz:

#相关属性配置

properties:

org:

quartz:

scheduler:

instanceName: clusteredSchedule

instanceId: AUTO

jobStore:

class: org.quartz.impl.jdbcjobstore.JobStoreTX

driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate

tablePrefix: QRTZ_

isClustered: true

clusterCheckinInterval: 10000

useProperties: false

threadPool:

class: org.quartz.simpl.SimpleThreadPool

threadCount: 10

threadPriority: 5

threadsInheritContextClassLoaderOfInitializingThread: true

#数据库方式

job-store-type: jdbc

#初始化表结构

#jdbc:

#initialize-schema: neve

```

#### 4.创建任务测试类

- 简单任务

![image.png](https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/f635bbf249e4436db1ee44e5249fa916~tplv-k3u1fbpfcp-watermark.image)

代码如下:

```

public class MyJob extends QuartzJobBean {

@Override

protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException {

System.out.println("start My Job:" + LocalDateTime.now());

try {

Thread.sleep(3000);

} catch (InterruptedException e) {

e.printStackTrace();

}

System.out.println("end My Job:" + LocalDateTime.now());

}

}

```

- CRON任务

![](https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/1199f543133c4c25ac4ba0c739f2649d~tplv-k3u1fbpfcp-watermark.image)

```

public class MyCronJob extends QuartzJobBean {

@Autowired

IndexController indexController;

@Override

protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException {

System.out.println("任务执行了" + new Date());

// indexController.testMail();

}

}

```

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档