2013-01-22 66 views
0

我正在使用Quartz JDBC Job store(org.quartz.impl.jdbcjobstore.JobStoreTX)和MySQL來調度作業。測試Quartz JDBC Job Store

我有以下設置:

org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX 
org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegate 
org.quartz.jobStore.dataSource=foo 
org.quartz.dataSource.foo.driver=com.mysql.jdbc.Driver 
org.quartz.dataSource.foo.URL=jdbc:mysql://localhost:3306/myDB 
org.quartz.dataSource.foo.user=user 
org.quartz.dataSource.foo.password=***** 
org.quartz.dataSource.foo.maxConnections=5 
org.quartz.dataSource.foo.validateOnCheckout=true 
org.quartz.dataSource.foo.validationQuery=SELECT 1 

我能安排工作與石英從數據庫拿起作業時的時間到期。

有一些工作可以安排在未來3到4周。我如何測試這個?

現在我去手動更改系統時間。例如,如果我安排工作在2/5/2013 12:45 PM上運行,那麼我將系統時鐘時間更改爲2/5/2013 12:43 PM,然後等待幾分鐘以查看是否Quartz從數據庫中提取工作。這對我來說很好。

我不想在每次需要測試時更改系統時鐘時間。有一個更好的方法嗎?

我注意到,頻繁更改系統時間有時會使用Quartz混淆,但某些作業不會被拾取。

+0

您是否真的必須安排這麼遠的工作?爲什麼你不能安排工作在幾秒鐘/分鐘的時間內運行?測試日程安排是不夠的嗎? – harpun

+0

您可以檢查getNextFireTime()。我認爲你必須相信,如果Quartz計劃得當,Quartz將會做正確的事情。您仍然需要測試計劃運行的作業是否正常工作。 –

+0

@harpun - 我能夠測試幾分鐘/幾小時和幾天的工作。我必須支持該功能長達一個月。我想測試所有可能的場景,包括那些計劃在3周內運行的場景。 – serverfaces

回答

0

您可以使用Quartz TriggerUtils方法來確定未來的執行是否是預期的。

更具體地說,computeFireTimes(org.quartz.spi.OperableTrigger trigg, Calendar cal, int numTimes)方法返回觸發器下一個觸發時間的日期列表。

我希望這會有所幫助。

相關問題