Spring整合Quartz定時任務(wù)詳解

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 提供在線支持:

一鍵快速構(gòu)建Spring項目工具

一鍵快速構(gòu)建SpringBoot項目工具

一鍵快速構(gòu)建SpringCloud項目工具

一站式Springboot項目生成

Mysql一鍵生成Mybatis注解Mapper

如果大家正在尋找一個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)建項目

Spring組件化構(gòu)建

SpringBoot組件化構(gòu)建

SpringCloud服務(wù)化構(gòu)建

喜歡這篇文章么,喜歡就加入我們一起討論SpringBoot技術(shù)吧拴还!


品茗IT交流群
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末跨晴,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子自沧,更是在濱河造成了極大的恐慌坟奥,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拇厢,死亡現(xiàn)場離奇詭異爱谁,居然都是意外死亡,警方通過查閱死者的電腦和手機孝偎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進店門访敌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人衣盾,你說我怎么就攤上這事寺旺。” “怎么了势决?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵阻塑,是天一觀的道長。 經(jīng)常有香客問我果复,道長陈莽,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任虽抄,我火速辦了婚禮走搁,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘迈窟。我一直安慰自己私植,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布车酣。 她就那樣靜靜地躺著曲稼,像睡著了一般索绪。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上躯肌,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天者春,我揣著相機與錄音,去河邊找鬼清女。 笑死钱烟,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的嫡丙。 我是一名探鬼主播拴袭,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼曙博!你這毒婦竟也來了拥刻?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤父泳,失蹤者是張志新(化名)和其女友劉穎般哼,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體惠窄,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡蒸眠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了杆融。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片楞卡。...
    茶點故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖脾歇,靈堂內(nèi)的尸體忽然破棺而出蒋腮,到底是詐尸還是另有隱情,我是刑警寧澤藕各,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布池摧,位于F島的核電站,受9級特大地震影響激况,放射性物質(zhì)發(fā)生泄漏险绘。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一誉碴、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧瓣距,春花似錦黔帕、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽呐芥。三九已至,卻和暖如春奋岁,著一層夾襖步出監(jiān)牢的瞬間思瘟,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工闻伶, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留滨攻,地道東北人。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓蓝翰,卻偏偏與公主長得像光绕,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子畜份,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,697評論 2 351

推薦閱讀更多精彩內(nèi)容