Spring整合Quartz定時任務(wù)詳解
Spring quartz定時任務(wù)官方網(wǎng)站
一铁蹈、概述
用Spring,就是為了簡單拉庶。
但是我還是要總結(jié)下java定時任務(wù)實現(xiàn)的幾種方式嗜憔。
1.TimerTask,等于一個線程隔一段時間運行一下氏仗。
2.ScheduledExecutorService吉捶,線程池版的TimerTask夺鲜。
3.Spring支持的定時任務(wù),@Schedule注解呐舔,支持crontab表達式币励。
4.quartz,比較流行的任務(wù)調(diào)度工具珊拼,就是配置起來麻煩食呻。
上一篇講了《Spring整合Schedule定時任務(wù)詳解
》,本篇講述如何整合Quartz做定時任務(wù)澎现。
項目地址:
品茗IT-同步發(fā)布
品茗IT 提供在線支持:
如果大家正在尋找一個java的學(xué)習(xí)環(huán)境仅胞,或者在開發(fā)中遇到困難,可以加入我們的java學(xué)習(xí)圈剑辫,點擊即可加入干旧,共同學(xué)習(xí),節(jié)約學(xué)習(xí)時間妹蔽,減少很多在學(xué)習(xí)中遇到的難題椎眯。
二、Maven依賴
<?xml version="1.0"?>
<project
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>cn.pomit</groupId>
<artifactId>SpringWork</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>Quartz</artifactId>
<packaging>jar</packaging>
<name>Quartz</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.3.0</version>
</dependency>
</dependencies>
</project>
父模塊可以在https://www.pomit.cn/spring/SpringWork/pom.xml中獲取胳岂。
quartz主要用到spring-tx编整、spring-context-support和quartz。
三乳丰、環(huán)境配置
本文假設(shè)你已經(jīng)引入Spring必備的一切了掌测,已經(jīng)是個Spring項目了,如果不會搭建,可以打開這篇文章看一看《Spring和Spring Mvc 5整合詳解》产园。
為方便使用赏半,我們一般把定時任務(wù)的crontab表達式提出去。
所以淆两,我們可以配置一個Spring的配置文件spring-quartz.xml,然后在Spring的主配置文件中,用<import resource="classpath*:spring-quartz.xml"/>
引入即可拂酣,這樣模塊的耦合性就沒那么強秋冰。
spring-quartz.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:p="http://www.springframework.org/schema/p"
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">
<context:annotation-config />
<context:component-scan base-package="cn.pomit.springwork">
</context:component-scan>
<bean id="annotationPropertyConfigurerSchedule"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="order" value="1" />
<property name="ignoreUnresolvablePlaceholders" value="true" />
<property name="locations">
<list>
<value>classpath:quartz.properties</value>
</list>
</property>
</bean>
<bean id="jobDetailTest" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject">
<ref bean="scheduleService" />
</property>
<property name="targetMethod">
<value>doJob</value>
</property>
</bean>
<bean id="cronTriggerTest" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail">
<ref bean="jobDetailTest" />
</property>
<property name="cronExpression">
<value>${schedule.task.test}</value>
</property>
</bean>
<!-- 總配置 -->
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<!-- 添加觸發(fā)器 -->
<property name="triggers">
<list>
<ref bean="cronTriggerTest" />
</list>
</property>
</bean>
</beans>
這里婶熬,配置了三個和quartz相關(guān)的bean剑勾,quartz配置這點很煩人,一個定時任務(wù)赵颅,要配置一個jobDetail虽另、一個Trigger,然后把Trigger加入到SchedulerFactoryBean中饺谬,所以這里如果要再添加一個定時任務(wù)捂刺,就需要再寫一個jobDetail和一個Trigger捏卓。
jobDetail:指明了定時任務(wù)的業(yè)務(wù)邏輯怎么調(diào)用馍管。
Trigger:決定定時任務(wù)怎么觸發(fā),要么是CronTrigger,或者是其他美莫,很多的,這里不一一說明了遗菠,CronTrigger已經(jīng)可以解決一切問題了痴荐。
SchedulerFactoryBean: 匯總所有Trigger,管理調(diào)度恰画。
quartz.properties:
schedule.task.test=0/2 * * * * ?
四宾茂、業(yè)務(wù)邏輯
ScheduleService:
package cn.pomit.springwork.quartz.service;
import org.springframework.stereotype.Service;
@Service
public class ScheduleService {
public void doJob() {
System.out.println("test");
}
}
快速構(gòu)建項目
喜歡這篇文章么,喜歡就加入我們一起討論SpringBoot技術(shù)吧拴还!