Quartz-Spring整合Quartz通過XML配置的方式
概述
Spring為建立Quartzde Scheduler、Trigger和JobDetail提供了方便的FactoryBean類,以便能夠在Spring容器中享受注入的好處。
此外,Spring還通了一些便利的工具類,用於直接將Spring中的Bean包裝成合法的任務。
Spring進一步降低了使用Quartz的難度,能夠以更加Spring風格的方式使用Quartz,主要體現在如下兩點
為Quartz的重要元件提供更具Bean風格的擴充套件類
提供建立Scheduler的BeanFactory類,方便在Spring環境下建立對應的元件物件,並結合Spring容器生命週期執行啟動和停止的動作
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實現
JobDteail通過MethodInvokeJobDetailFactoryBean實現(推薦)
1 建立JobDteail
Spring通過擴充套件JobDetail提供了一個更具Bean風格的JobDetailFactoryBean,此外Spring還提供了了一個 MethodInvokingJobDetailFactoryBean,通過這個FactoryBean可以將Spring容器中的Bean的方法包裝成Quartz任務,這樣我們就不必為Job建立對應的類。
案例中會分別講述兩種實現方式的區別
2 建立Trigger
Quartz中另外一個重要的元件就是Trigger,Spring按照相似的思路分別為SimpleTrigger和CronTrigger提供了更具Bean風格的CronTriggerFactoryBean和SimpleTriggerFactoryBean擴充套件類。
3 建立Scheduler
Quartz的SchedulerFactory是標準的工廠類,不太適合在Spring中使用。 此外為了保證Scheduler能夠感知Spring容器的生命週期,在Spring容器啟動後,Scheduler自動開始工作,而在Spring容器關閉前,自動關閉Scheduler。為此Spring提供了SchedulerFactoryBean.
示例-MethodInvokingJobDetailFactoryBean
因為下面的案例中我們使用MethodInvokingJobDetailFactoryBean,所以下面的這個Job無需繼承任何類或者實現任何介面
模擬業務類
配置成一個普通的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/beans
http://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">
<!-- 執行目標job -->
<property name="targetObject" ref="myJob"></property>
<!-- 要執行的方法 -->
<property name="targetMethod" value="execute"></property>
</bean>
<!-- 配置tirgger觸發器 -->
<bean id="cronTriggerFactoryBean" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<!-- jobDetail -->
<property name="jobDetail" ref="springQtzJobMethod"></property>
<!-- cron表示式,執行時間 每5秒執行一次 -->
<property name="cronExpression" value="0/5 * * * * ?"></property>
</bean>
<!-- 配置排程工廠 -->
<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">
<!--配置具體要執行的jobDetail-->
<property name="jobDetail" ref="simpleJobDetail" />
<!--初始延遲時間 1s-->
<property name="startDelay" value="1000" />
<!--間隔執行時間每2s執行一次-->
<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");
}
}
在排程器中,有一個lazy-init引數,如果lazy-init=’false’,則容器啟動時就會執行排程程式;如果lazy-init=’true’,則需要例項化該bean才能執行排程程式;
<bean id="springJobSchedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean" lazy-init="true">
執行結果
2017-11-11 02:03:41,399 INFO [main] (AbstractApplicationContext.java:583) - Refreshing org[email protected]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: 0
Using 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.[email protected]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
業務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,這是業務Job需要繼承QuartzJobBean
*
* @author: Mr.Yang
*
* @date: 2017年11月12日 上午7:54:28
*/
public class MyJob2 extends QuartzJobBean {
@Override
protected 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/beans
http://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觸發器 -->
<bean id="cronTriggerFactoryBean" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<!-- jobDetail -->
<property name="jobDetail" ref="jobDetail"></property>
<!-- cron表示式,執行時間 每5秒執行一次 -->
<property name="cronExpression" value="0/5 * * * * ?"></property>
</bean>
<!-- 配置排程工廠 如果將lazy-init='false'那麼容器啟動就會執行排程程式 -->
<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");
}
}
執行結果
2017-11-12 08:14:27,934 INFO [main] (AbstractApplicationContext.java:583) - Refreshing org[email protected]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: 0
Using 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: [email protected]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 的第二種方式
.......
.......
.......
示例原始碼
相關推薦
Quartz-Spring整合Quartz通過XML配置的方式
概述 Spring為建立Quartzde Scheduler、Trigger和JobDetail提供了方便的FactoryBean類,以便能夠在Spring容器中享受注入的好處。 此外,Spring還通了一些便利的工具類,用於直接將Spring中的
cors跨域請求問題 關於spring -springmvc -mybatis .基於xml配置方式
1:場景還原 今天要寫一個方法, 需求是 在購物車服務上, 呼叫一個個人中心的方法 ,用到了 跨域請求. 我就在個人中心的 上面寫了個方法, 並在springMVC.xml中,配置了 &
Spring boot + Mybatis(基於xml配置方式) WEB專案
一.工具(idea) 二.建立專案 最後finish; 3.配置與編寫demo 目錄: 3.1 springBoot配置檔案:application.yml;也可使用properties檔案 spring: #資料來源配置 datas
spring專案中通過xml配置快取(cache)記錄貼
配置一個spring預設實現的快取(cache)<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:
spring整合中application.xml配置
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springfr
Spring整合quartz定時任務排程的cronExpression配置說明(轉載)
Spring整合quartz定時任務排程 "* * * * * *" 欄位 允許值 允許的特殊字元 秒
Spring整合Quartz的3種方式
1.使用xml配置方式 Maven依賴 <properties> <!-- spring版本號 --> <spring.version>4.2.2.RELEASE</spring.version>
Spring整合Quartz案例使用JDBC儲存方式
目錄 建立資料庫表 配置資料庫連線池 建立工作類 工作類中呼叫的業務類 工作類 配置JobDetail和Trigger,並交給Scheduler註冊 測試 Quartz叢集中如何工作 Quartz叢集環境下配置 quartz.properties
Spring整合Quartz案例使用RAM儲存方式
spring整合quartz有兩種任務儲存方式,RAM儲存方式和JDBC儲存方式,企業開發使用的JDBC儲存方式。 先從RAM儲存方式開始說起 目錄 Jar包依賴 quartz-config.xml 建立jobDetail 依賴org.springframewor
spring整合quartz實現動態定時任務的前臺網頁配置與管理
在實際專案應用中經常會用到定時任務,可以通過quartz和spring的簡單配置即可完成,但如果要改變任務的執行時間、頻率,廢棄任務等就需要改變配置甚至程式碼需要重啟伺服器,這裡介紹一下如何通過quartz與spring的組合實現動態的改變定時任務的狀態的一個實
Spring整合Hibernate管理事務(xml配置方式)
之前是剛開始使用Spring的事務管理,採用比較簡單方便的註解方式進行事務處理,而註解方式進行事務處理需要在每一個要實現事務的類上新增@Transactional註解,在比較小的專案中可以這樣來用。但是在大型專案中,註解方式管理事務不夠清晰,無法判斷哪裡開啟了事務,必須一一
Spring mvc通過xml配置檔案方式實現簡單HelloWorld
實現Spring MVC有兩種不同的方式:基於XML配置檔案和基於註解。 這裡,我們使用XML檔案的方式來實現。 首先,我們需要在Eclipse或者是MyEclipse中新建一個web專案,並將Spr
初識quartz 並分析 項目中spring整合quartz的配置【原創+轉載】
text lca 目的 並發 目錄結構 public 項目 功能 基於 初識quartz 並分析 項目中spring整合quartz的配置【原創+轉載】2018年01月29日 12:08:07 守望dfdfdf 閱讀數:114 標簽: quartz 更多個人分類: 工具 軟
day39-Spring 11-Spring的AOP:基於AspectJ的XML配置方式
asp 技術 mage bsp aop src xml配置方式 img aspectj day39-Spring 11-Spring的AOP:基於AspectJ的XML配置方式
Spring整合quartz實現定時動態任務
comm 通過 app 定時器 表示 時間 con 任務 images 在Spring中使用Quartz有兩種方式實現:第一種是任務類繼承QuartzJobBean,第二種則是在配置文件裏定義任務類和要執行的方法,類和方法可以是普通類。很顯然,第二種方式遠比第一種方式來的靈
Spring quartz Job不能依賴註入,Spring整合quartz Job任務不能註入
nbsp too upd ticket enter java代碼 rec onf 2.3 Spring quartz Job不能依賴註入,Spring整合quartz Job任務不能註入 Spring4整合quartz2.2.3中Job任務使用@Autowired不能註入
Spring整合quartz關閉,關閉Tomcat Servlet容器時內存泄漏
read 還在 iss 出錯 appears 定時器線程 span img tro 出錯信息 22-Sep-2017 06:19:51.064 WARNING [main] org.apache.catalina.loader.WebappClassLoaderBas
spring整合Quartz定時器
() void java類 info throws tex execute new protect 第一種:為普通java類中的某個方法配置跑批任務 1.定義要跑批的類和方法: package com.xy.utils.quartz; import org.joda.t
Spring整合Quartz定時任務 在集群、分布式系統中的應用(Mysql數據庫環境)
foreign log ride bigint post 業務 設置 ade 營業額 Spring整合Quartz定時任務 在集群、分布式系統中的應用(Mysql數據庫環境) 轉載:http://www.cnblogs.com/jiafuwei/p/6145280.
Spring 基於xml配置方式的AOP(8)
復制 calc owin img add ann frame proc message 1、ArithmeticCalculator.java 1 package com.proc; 2 3 public interface ArithmeticCalculator