SpringBoot 整合 Quartz

本贴最后更新于 2506 天前,其中的信息可能已经斗转星移

Quartz 是一个相当优秀的任务调度项目,在 SpringBoot 中对其进行集成也是一件不算难也不算容易的事情。然而,该有的坑总是会来的。

前言

废话不多说,先上 Demo。

Github :quartz-schedule-demo

这个项目是我将 Quartz 官方案例在 SpringBoot 上的一个 Demo 实现,同时配上了必要的注释和适当的调整。

对于新接触的同学来说,应该是一个不错的上手项目。

案例

quartz-schedule-demo 项目中目前一共包含 8 个 Demo,后期添加新的 Demo 时,我会更新这篇博文。

分别是:

Demo1

简单的循环任务,每隔 10 秒一次输出

  • 启动 Test 下 SimpleTest 的 demo1Test(请将其 ignore 注释)

  • SimpleJob 将每隔 10 秒钟运行一次。

Demo2

传递参数到 Jobs 中,直接从 context 中读取参数。

  • 启动 Test 下 DataParseTest 的 parameterTest(请将其 ignore 注释)

  • DataParseJob 将每隔 10 秒运行一次。

Demo3

同样传递参数到 Jobs 中,但将参数写入 Jobs 的属性。

  • 启动 Test 下 DataParseTest 的 parameterAutoWriteTest(请将其 ignore 注释)

  • HighLevelParameterJob 将每隔 10 秒运行一次。

Demo4

延时五秒后执行任务

  • 启动 Test 下 SimpleTest 的 demo4Test(请将其 ignore 注释)

  • 五秒后控制台可以看到输出。

Demo5

延时五秒后启动一个任务,该任务每隔 10 秒执行一次,直到执行了 10 次为止。

  • 启动 Test 下 SimpleTest 的 demo5Test(请将其 ignore 注释)

  • 五秒后控制台可以看到输出。(一共会看到 11 行输出)

Demo6

立即启动一个任务,然后每隔 5 分钟执行一次,直到当天下午 4 点为止。

  • 启动 Test 下 SimpleTest 的 demo6Test(请将其 ignore 注释)

  • 检查结果

Demo7

每个偶数小时整(14:00,16:00)执行一次任务。

  • 启动 Test 下 SimpleTest 的 demo7Test(请将其 ignore 注释)

  • 检查结果

Demo8

通过配置,将 Spring 的 Bean 对象自动加载到 Quartz 的 JobFactory 中。

Demo8 检测了 Quartz 的 job 在执行的过程中,能否正常使用 Spring 的 Bean 对象

  • 启动 Test 下 HelloTest 的 Demo8Test(请将其 ignore 注释)

  • 检查运行结果

排坑

在读官方文档的过程中,基本上从 Demo1 一直跑到 Demo7 都没什么问题,唯一的大问题出现在 Quartz 的 SimpleThreadPool 上,这个线程池在执行 Jobs 的过程中,如果缺少对 JobFactory 配置 Spring 的 Context,那么执行的 Job 将无法正常解析 Spring 的 Bean 对象。

以下是详细的解决办法:

  • 引入 spring-context-support,在 pom.xml 中加下面的依赖

      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context-support</artifactId>
        <version>4.3.13.RELEASE</version>
      </dependency>
    
  • 配置 applicationContext.getAutowireCapableBeanFactory(),加载到 JobFactory 中即可。(详细代码请见项目中的 config)

  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3187 引用 • 8213 回帖
  • Quartz
    19 引用 • 16 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...