Quartz與Spring集成


關於Quartz的基本知識,這里就不再多說,可以參考Quartz的example。

這里主要要說的是,個人在Quartz和Spring集成的過程中,遇到的問題和個人理解。

首先來說說個人的理解:

1、Quartz的運行原理

Quartz的重要組成部分就是,線程池和Trigger。而這些資源是被一個叫StandScheduler的類管理起來的。

所以,每一個Quartz程序咋啟動的時候,都需要創建一個Scheduler對象,由它來管理Quartz的資源。它啟動的時候,會首先啟動Quartz的調度線程,然后初始化線程池中的線程。

每當一個trigger生效的時候,會從線程池中取出一個線程,調用對應job的execute方法,開始執行。

2.Quartz的job如何取消

首先你的job要繼承自interruptablejob,但job的interrupt方法被調用時,你自己可以設一個標志表明已經被cancel了,在execute方法不斷的檢測這個標志,發現cacel,則中斷當前的job。

3.Quartz如何嵌入到Spring中

首先要明白,Quartz如何啟動Spring。且看下面的pring的配置:

<bean id="schedulerFactory" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="configLocation" value="/WEB-INF/classes/quartz.properties" />
<property name="dataSource" ref="dataSource" />
<property name="overwriteExistingJobs" value="true" />
<property name="autoStartup" value="false" />
</bean>

這個bean在Spring啟動的時候就會創建一個SchedulerFactoryBean實例,它會根據你的配置的屬性,創建一個schedule實例。

quartz的基本配置,報名線程池的設置,最大的連接數等

<property name="configLocation" value="/WEB-INF/classes/quartz.properties" />   

需要用到jdbc store來持久化存儲,后面會詳細解釋
<property name="dataSource" ref="dataSource" />

需要overwrite已經存在的job,如果需要動態的修改已經存在的job,就需要設置為true,否則會以數據庫中已經存在的為准
<property name="overwriteExistingJobs" value="true" />

是否自動啟動,這個比較好理解
<property name="autoStartup" value="true" />

4.如何配置Quartz的jdbc 持久化。

Quartz本身就提供了兩種做法來做jdbc的持久化。一個是在Quartz.properties你們配置,具體可以參考它的example。

另一個就是自己在Spring中配置SchedulerFactoryBean的datasource屬性,你需要在Spring中創建一個datasource的bean。

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" >
<property name="driverClassName"><value>org.postgresql.Driver</value></property>
<property name="url"><value>jdbc:postgresql://127.0.0.1:3306/dms</value></property>
<property name="username"><value>username</value></property>
<property name="password"><value>password</value></property>
</bean>

我在使用中,第一種方式,一直沒有成功,無法連接上數據庫,檢查了各種原因,還是沒有發現root cause。

但第二張方式,沒有任何問題。 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM