spring 整合 Quartz 定时任务以及填坑

本贴最后更新于 2644 天前,其中的信息可能已经物是人非

项目中有个功能需要加入定时(每天整点 30 分钟)执行一次任务的功能,听闻 quartz 的强大,可以设置复杂的调度任务,于是决定使用 quartz

环境

  • maven
  • spring 4.2.1 Release
  • tomcat 8.5
  • eclipse oxygen
  • ubuntu 16.04

引入依赖

<!-- https://mvnrepository.com/artifact/org.quartz-scheduler/quartz --> <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.3.0</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>${spring.version}</version> </dependency>

这里有个坑,spring-context 中有个包叫 scheduling,但是并没有 qutzar 这个子包,所以需要单独引入 spring-context-support

配置 spring-bean

<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/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"> <!-- 线程执行器配置,用于任务注册 --> <bean id="executor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor"> <property name="corePoolSize" value="10" /> <property name="maxPoolSize" value="20" /> <property name="queueCapacity" value="500" /> </bean> <!-- 业务对象 --> <bean id="bizObject" class="xx.xx.xx.xx.job.Myjob" /> <!-- 调度业务 --> <bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="targetObject" ref="bizObject" /> <!-- 设置执行的方法 --> <property name="targetMethod" value="execute" /> </bean> <!-- 增加调度触发器 --> <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"> <property name="jobDetail" ref="jobDetail" /> <!-- 定义表达式 --> <property name="cronExpression" value="0 0/30 * * * ?" /> </bean> <!-- 设置调度 --> <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <ref bean="cronTrigger" /> </list> </property> <property name="taskExecutor" ref="executor" /> </bean> </beans>

这里还有个问题,参考的文章中触发器使用的是 CronTrigger 类,需要使用 spring-content-support 1.x 版本
之后的版本使用的是 CronTriggerFactoryBean

这是任务类,直接写业务逻辑 E

public class Myjob{ //可注入service //@AutoWired // private Service service; public void execute(){ //do something } }

表达式

表达式语法可以看参考中的连接,也可以直接使用生成器生成,参考文章末尾

参考

Spring 集成 Quartz 定时任务框架介绍和 Cron 表达式详解

生成器

cron.qqe2.com 在线生成
quartz 表达式在线自动生成
生成后底部有测试功能可以调试

(End)

相关帖子

欢迎来到这里!

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

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