日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

Quartz-Spring集成Quartz通过XML配置的方式

發(fā)布時間:2025/3/21 asp.net 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Quartz-Spring集成Quartz通过XML配置的方式 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

  • 概述
  • Maven依賴
  • 步驟
    • 1 創(chuàng)建JobDteail
    • 2 創(chuàng)建Trigger
    • 3 創(chuàng)建Scheduler
  • 示例-MethodInvokingJobDetailFactoryBean
  • 示例-JobDetailFactoryBean
  • 示例源碼

概述

Spring為創(chuàng)建Quartzde Scheduler、Trigger和JobDetail提供了方便的FactoryBean類,以便能夠在Spring容器中享受注入的好處。

此外,Spring還通了一些便利的工具類,用于直接將Spring中的Bean包裝成合法的任務(wù)。

Spring進一步降低了使用Quartz的難度,能夠以更加Spring風(fēng)格的方式使用Quartz,主要體現(xiàn)在如下兩點

  • 為Quartz的重要組件提供更具Bean風(fēng)格的擴展類

  • 提供創(chuàng)建Scheduler的BeanFactory類,方便在Spring環(huán)境下創(chuàng)建對應(yīng)的組件對象,并結(jié)合Spring容器生命周期執(zhí)行啟動和停止的動作


Maven依賴

主要的兩個依賴如下:

<dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId><version>${spring.version}</version> </dependency><dependency><groupId>org.quartz-scheduler</groupId><artifactId>quartz</artifactId><version>2.2.3</version> </dependency>

spring-context-support包主要是Spring集成了很多有用的第三方庫,我們在使用第三方的東西的時候一般都需要引入該依賴。


步驟

Spring通過xml的方式集成Quartz,主要有兩種方式

  • JobDteail通過JobDetailBean實現(xiàn)

  • JobDteail通過MethodInvokeJobDetailFactoryBean實現(xiàn)(推薦)


  • 1 創(chuàng)建JobDteail

    Spring通過擴展JobDetail提供了一個更具Bean風(fēng)格的JobDetailFactoryBean,此外Spring還提供了了一個 MethodInvokingJobDetailFactoryBean,通過這個FactoryBean可以將Spring容器中的Bean的方法包裝成Quartz任務(wù),這樣我們就不必為Job創(chuàng)建對應(yīng)的類。

    案例中會分別講述兩種實現(xiàn)方式的區(qū)別


    2 創(chuàng)建Trigger

    Quartz中另外一個重要的組件就是Trigger,Spring按照相似的思路分別為SimpleTrigger和CronTrigger提供了更具Bean風(fēng)格的CronTriggerFactoryBean和SimpleTriggerFactoryBean擴展類。


    3 創(chuàng)建Scheduler

    Quartz的SchedulerFactory是標(biāo)準(zhǔn)的工廠類,不太適合在Spring中使用。 此外為了保證Scheduler能夠感知Spring容器的生命周期,在Spring容器啟動后,Scheduler自動開始工作,而在Spring容器關(guān)閉前,自動關(guān)閉Scheduler。為此Spring提供了SchedulerFactoryBean.


    示例-MethodInvokingJobDetailFactoryBean

    因為下面的案例中我們使用MethodInvokingJobDetailFactoryBean,所以下面的這個Job無需繼承任何類或者實現(xiàn)任何接口

    模擬業(yè)務(wù)類

    配置成一個普通的java類即可

    package com.xgj.quartz.quartzWithSpring.xml;/*** * * @ClassName: MyJob* * @Description: 不用繼承Quartz的Job接口* * @author: Mr.Yang* * @date: 2017年11月10日 下午10:17:26*/ public class MyJob {public void execute() {System.out.println("Quartz Spring XML 配置 - MyJob");}}

    Spring集成Quartz的配置文件

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><!-- 配置Job類 --><bean id="myJob" class="com.xgj.quartz.quartzWithSpring.xml.MyJob"></bean><!-- 配置JobDetail --><bean id="springQtzJobMethod" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"><!-- 執(zhí)行目標(biāo)job --><property name="targetObject" ref="myJob"></property><!-- 要執(zhí)行的方法 --><property name="targetMethod" value="execute"></property></bean><!-- 配置tirgger觸發(fā)器 --><bean id="cronTriggerFactoryBean" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"><!-- jobDetail --><property name="jobDetail" ref="springQtzJobMethod"></property><!-- cron表達(dá)式,執(zhí)行時間 每5秒執(zhí)行一次 --><property name="cronExpression" value="0/5 * * * * ?"></property></bean><!-- 配置調(diào)度工廠 --><bean id="springJobSchedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"><property name="triggers"><list><ref bean="cronTriggerFactoryBean"></ref></list></property></bean> </beans>

    除了使用CronTrigger也可以使用SimpleTrigger配置,示例代碼如下

    <bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean"><!--配置具體要執(zhí)行的jobDetail--><property name="jobDetail" ref="simpleJobDetail" /><!--初始延遲時間 1s--><property name="startDelay" value="1000" /><!--間隔執(zhí)行時間每2s執(zhí)行一次--><property name="repeatInterval" value="2000" /> </bean>

    測試類

    package com.xgj.quartz.quartzWithSpring.xml;import org.springframework.context.support.ClassPathXmlApplicationContext;public class SpringQuartzXmlTest {public static void main(String[] args) {// 啟動Spring 容器ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("classpath:com/xgj/quartz/quartzWithSpring/xml/application.xml");System.out.println("initContext successfully");} }

    在調(diào)度器中,有一個lazy-init參數(shù),如果lazy-init=‘false’,則容器啟動時就會執(zhí)行調(diào)度程序;如果lazy-init=‘true’,則需要實例化該bean才能執(zhí)行調(diào)度程序;

    <bean id="springJobSchedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean" lazy-init="true">

    運行結(jié)果

    2017-11-11 02:03:41,399 INFO [main] (AbstractApplicationContext.java:583) - Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@174580e6: startup date [Sat Nov 11 02:03:41 BOT 2017]; root of context hierarchy 2017-11-11 02:03:41,481 INFO [main] (XmlBeanDefinitionReader.java:317) - Loading XML bean definitions from class path resource [com/xgj/quartz/quartzWithSpring/xml/application.xml] INFO StdSchedulerFactory - Using default implementation for ThreadExecutor INFO SchedulerSignalerImpl - Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl INFO QuartzScheduler - Quartz Scheduler v.2.2.3 created. INFO RAMJobStore - RAMJobStore initialized. INFO QuartzScheduler - Scheduler meta-data: Quartz Scheduler (v2.2.3) 'springJobSchedulerFactoryBean' with instanceId 'NON_CLUSTERED'Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally.NOT STARTED.Currently in standby mode.Number of jobs executed: 0Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 10 threads.Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered.INFO StdSchedulerFactory - Quartz scheduler 'springJobSchedulerFactoryBean' initialized from an externally provided properties instance. INFO StdSchedulerFactory - Quartz scheduler version: 2.2.3 INFO QuartzScheduler - JobFactory set to: org.springframework.scheduling.quartz.AdaptableJobFactory@7fe0dbb6 2017-11-11 02:03:42,862 INFO [main] (DefaultLifecycleProcessor.java:343) - Starting beans in phase 2147483647 2017-11-11 02:03:42,862 INFO [main] (SchedulerFactoryBean.java:645) - Starting Quartz Scheduler now INFO QuartzScheduler - Scheduler springJobSchedulerFactoryBean_$_NON_CLUSTERED started. initContext successfully Quartz Spring XML 配置 - MyJob Quartz Spring XML 配置 - MyJob Quartz Spring XML 配置 - MyJob Quartz Spring XML 配置 - MyJob Quartz Spring XML 配置 - MyJob ....... ....... ....... .......

    示例-JobDetailFactoryBean

    業(yè)務(wù)Job模擬類

    package com.xgj.quartz.quartzWithSpring.xml2;import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.springframework.scheduling.quartz.QuartzJobBean;/*** * * @ClassName: MyJob2* * @Description: 配置文件中使用JobDetailBean,這是業(yè)務(wù)Job需要繼承QuartzJobBean* * @author: Mr.Yang* * @date: 2017年11月12日 上午7:54:28*/ public class MyJob2 extends QuartzJobBean {@Overrideprotected void executeInternal(JobExecutionContext ctx)throws JobExecutionException {System.out.println("Spring 集成 Quartz 的第二種方式");}}

    Spring集成Quartz的配置文件

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><!-- 配置Job類 --><bean id="myJob" class="com.xgj.quartz.quartzWithSpring.xml.MyJob"></bean><!-- 配置JobDetail --><bean id="jobDetail" class="org.springframework.scheduling.quartz.JobDetailFactoryBean"><property name="jobClass" value="com.xgj.quartz.quartzWithSpring.xml2.MyJob2"></property><property name="durability" value="true"></property></bean><!-- 配置tirgger觸發(fā)器 --><bean id="cronTriggerFactoryBean" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"><!-- jobDetail --><property name="jobDetail" ref="jobDetail"></property><!-- cron表達(dá)式,執(zhí)行時間 每5秒執(zhí)行一次 --><property name="cronExpression" value="0/5 * * * * ?"></property></bean><!-- 配置調(diào)度工廠 如果將lazy-init='false'那么容器啟動就會執(zhí)行調(diào)度程序 --><bean id="springJobSchedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"><property name="triggers"><list><ref bean="cronTriggerFactoryBean"></ref></list></property></bean> </beans>

    測試類

    package com.xgj.quartz.quartzWithSpring.xml2;import org.springframework.context.support.ClassPathXmlApplicationContext;public class SpringQuartzXmlTest {public static void main(String[] args) {// 啟動Spring 容器ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("classpath:com/xgj/quartz/quartzWithSpring/xml2/spring-quartz.xml");System.out.println("initContext successfully");} }

    運行結(jié)果

    2017-11-12 08:14:27,934 INFO [main] (AbstractApplicationContext.java:583) - Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@4af6178d: startup date [Sun Nov 12 08:14:27 BOT 2017]; root of context hierarchy 2017-11-12 08:14:28,014 INFO [main] (XmlBeanDefinitionReader.java:317) - Loading XML bean definitions from class path resource [com/xgj/quartz/quartzWithSpring/xml2/spring-quartz.xml] INFO StdSchedulerFactory - Using default implementation for ThreadExecutor INFO SchedulerSignalerImpl - Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl INFO QuartzScheduler - Quartz Scheduler v.2.2.3 created. INFO RAMJobStore - RAMJobStore initialized. INFO QuartzScheduler - Scheduler meta-data: Quartz Scheduler (v2.2.3) 'springJobSchedulerFactoryBean' with instanceId 'NON_CLUSTERED'Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally.NOT STARTED.Currently in standby mode.Number of jobs executed: 0Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 10 threads.Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered.INFO StdSchedulerFactory - Quartz scheduler 'springJobSchedulerFactoryBean' initialized from an externally provided properties instance. INFO StdSchedulerFactory - Quartz scheduler version: 2.2.3 INFO QuartzScheduler - JobFactory set to: org.springframework.scheduling.quartz.AdaptableJobFactory@404f4560 2017-11-12 08:14:28,800 INFO [main] (DefaultLifecycleProcessor.java:343) - Starting beans in phase 2147483647 2017-11-12 08:14:28,801 INFO [main] (SchedulerFactoryBean.java:645) - Starting Quartz Scheduler now INFO QuartzScheduler - Scheduler springJobSchedulerFactoryBean_$_NON_CLUSTERED started. initContext successfully Spring 集成 Quartz 的第二種方式 Spring 集成 Quartz 的第二種方式 Spring 集成 Quartz 的第二種方式 Spring 集成 Quartz 的第二種方式 Spring 集成 Quartz 的第二種方式 ....... ....... .......

    示例源碼

    代碼已托管到Github—> https://github.com/yangshangwei/SpringMaster

    總結(jié)

    以上是生活随笔為你收集整理的Quartz-Spring集成Quartz通过XML配置的方式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。