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

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

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

环境

引入依赖

<!-- 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)

赞助商 我要投放

欢迎来到这里!

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

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