Spring Boot 整合 Quartz 轻松实现任务调度!

来源:gyoomi.blog.csdn.net/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.安装配置

官方网站:

❝ http://quartz-scheduler.org/ ❞

3.设计架构

介绍

  • Scheduler – 核心调度器
  • Job – 任务
  • JobDetail – 任务描述
  • Trigger – 触发器

图示

 

 

多个定时的图示如下:

 

 

对比下配置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注册到Scheduler      -->     <!-- 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版本的。

2.添加依赖

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

3.yml配置

 

 

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

spring:   quartz:     #相关属性配置     properties:       org:         quartz:           scheduler:             instanceName: clusteredScheduler             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: never

4.创建任务测试类

简单任务

 

 

代码如下:

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任务

public class MyCronJob extends QuartzJobBean {      @Autowired     IndexController indexController;      @Override     protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException {         System.out.println("任务执行了" + new Date());         // indexController.testMail();     } }

 

5.Java配置(QuartzConfiguration)

@Configuration public class QuartzConfiguration {   // 使用jobDetail包装job     @Bean     public JobDetail myJobDetail() {         return JobBuilder.newJob(MyJob.class).withIdentity("myJob").storeDurably().build();     }   // 把jobDetail注册到trigger上去     @Bean     public Trigger myJobTrigger() {         SimpleScheduleBuilder scheduleBuilder = SimpleScheduleBuilder.simpleSchedule()                 .withIntervalInSeconds(15).repeatForever();          return TriggerBuilder.newTrigger()                 .forJob(myJobDetail())                 .withIdentity("myJobTrigger")                 .withSchedule(scheduleBuilder)                 .build();     }   // 使用jobDetail包装job     @Bean     public JobDetail myCronJobDetail() {         return JobBuilder.newJob(MyCronJob.class).withIdentity("myCronJob").storeDurably().build();     }   // 把jobDetail注册到Cron表达式的trigger上去     @Bean     public Trigger CronJobTrigger() {         CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule("0/10 * * * * ?");          return TriggerBuilder.newTrigger()                 .forJob(myCronJobDetail())                 .withIdentity("myCronJobTrigger")                 .withSchedule(cronScheduleBuilder)                 .build();     } }

其实上面的配置就等价于在传统的xml中配置bean是一样的。

6.启动测试

 

至此,SpringBoot集成Quartz的完毕。

四、总结

Spring Boot集成quartz还是比较简单的。

其实还有更高级的用法,就是前台动态创建和控制定时任务,后面有时间再完善。大家先把这种最简单的基本用法熟练掌握。

 

 

源码

  • https://github.com/gyoomi/framework

 

来源:https://mp.weixin.qq.com/s/4UA1SsTawK-H9jDNmTubOg

 

推荐这些文章:

Spring整合Quartz简单入门

创建一个Web项目

导入相关jar包
<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion&g...

spring和mybatis整合开发配置问题

applicationContext.xml配置如下
 
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.spri...

【Maven/Cli】如何解决错误:Cannot resolve plugin org.springframework.boot:spring-boot-maven-plugin:<unknown>

这个问题是在我制作一个SpringCLI程序的初期出现的,因此定位比较容易,出现这样的问题是因为我在pom里加入了如下节点:

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
...

spring整合mybathis配置文件

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" x...

采用quartz_jobs.xml配置corn触发器

采用quartz_jobs.xml配置corn触发器
<schedule>
<job>
<name>Expiry</name>
<group>JobGroup</group>
<job-type>Gxp.MaterialManage.Service.QuartzJob.ExpiryMaterialWarnJob,Gxp.MaterialManage.Service</job-type>
<durable>true</dura...

ssmbiuld整合-spring

spring-mapper.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframe...

spring-dataSource.xml 数据源spring-mybatis配置整合

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"

xsi:schemaLocation="http://www.springframework.org/sch...

springboot&Quartz整合

 
springboot基础配置

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;

@SpringBootApp...

Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:2.3.5. RELEASE:repackage (repackage) on project tristone-boot-module-system: zip file is empty

install打包报错:Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:2.3.7.RELEASE:repackage (repackage) on project

install打包报错:
Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:2.3.7.RELEASE:repackage (repackage) on project zbbzfw-common: Execution repackag...

spring boot 运行 报 java.lang.IllegalStateException: Error processing condition on org.springframework.boot.autoconfigure.web.client.RestTemplateAutoConfiguration.restTemplateBuilderConfigurer 的解决办法

新建了一个spring boot 的项目 ,然后 引用了好多包 ,刚新建的时候是没有问题的, 引了包以后 运行 报
java.lang.IllegalStateException: Error processing condition on org.springframework.boot.autoconfigure.web.client.RestTemplateAutoConfiguration.restTemplateBuilderConfigurer

一个一个试 ,把 dependency 注释掉 ,发现是 这个 引用的问题, 注释掉就 可以 运行 了
<!-...

文章标题:Spring Boot 整合 Quartz 轻松实现任务调度!
文章链接:https://www.dianjilingqu.com/3466.html
本文章来源于网络,版权归原作者所有,如果本站文章侵犯了您的权益,请联系我们删除,联系邮箱:saisai#email.cn,感谢支持理解。
THE END
1.2
< <上一篇
下一篇>>