2014-01-20 63 views
0

我有我的應用程序在Jboss(數據庫是informix)使用石英作爲調度目的。 當我在2個集羣式Jboss服務器上運行石英時,我發現作業在兩臺服務器上(相隔幾毫秒)都在相同的着火時間點燃。石英集羣不起作用

任何可以調整的指針可以讓石英在集羣服務器上正常運行,這將會非常有幫助。

感謝您的時間和反饋。

下面是我的quartz.properties什麼樣子:

org.quartz.scheduler.instanceName = MYQuartzScheduler 
org.quartz.scheduler.instanceId = AUTO 

org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool 
org.quartz.threadPool.threadCount = 5 
org.quartz.threadPool.threadPriority = 5 

org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX 
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate 
org.quartz.jobStore.dataSource = myDS 
org.quartz.jobStore.tablePrefix = quartz_ 
org.quartz.jobStore.useProperties = false 
org.quartz.jobStore.misfireThreshold = 60000 
org.quartz.jobStore.maxMisfiresToHandleAtATime = 20 

org.quartz.dataSource.myDS.jndiURL= xyzTX 

org.quartz.jobStore.isClustered = true 
org.quartz.jobStore.clusterCheckinInterval = 20000 

org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.JobInitializationPlugin 
org.quartz.plugin.jobInitializer.fileNames=abc_jobs.xml 
org.quartz.plugin.jobInitializer.overWriteExistingJobs = true 
org.quartz.plugin.jobInitializer.failOnFileNotFound = true 
org.quartz.plugin.jobInitializer.scanInterval = 60 

回答

0

我想我已經找到了解決辦法!

我禁用作業文件的自動掃描通過這樣做:

org.quartz.plugin.jobInitializer.scanInterval = 0 

,現在集羣是爲我工作非常精細。

JobInitializationPlugin仍然會在調度程序首次啓動時從xml文件創建作業,但之後不會掃描任何更改。

0

您正在運行在JBoss上石英所以請考慮使用HASingleton來控制主節點 - 那麼你就需要使用由石英,提供集羣這使用數據庫並導致問題。

HASingleton可因爲JBoss的4或5.如果您使用7版本,那麼你可以看看this post有關其實施

+0

感謝您的反饋意見。但看起來他們想用石英代替。 – user3216514

+0

請不要這樣做:-)我們已經嘗試過,並通過db –

0

這裏是我的項目石英服務定義細節。所有作業都在quartz-jobs.xml中描述,它們使用EJB3Invoker觸發EJB。我希望它有幫助。

石英service.xml的

<?xml version="1.0" encoding="UTF-8"?> 
<server> 
    <mbean code="org.quartz.ee.jmx.jboss.QuartzService" name="user:service=QuartzService,name=QuartzService"> 
     <depends>jboss.jca:service=DataSourceBinding,name=myDS</depends> 
     <attribute name="JndiName">Quartz</attribute> 
     <attribute name="Properties">   
org.quartz.scheduler.instanceName = MyScheduler 
org.quartz.scheduler.instanceId = AUTO 
org.quartz.scheduler.rmi.export = false 
org.quartz.scheduler.rmi.proxy = false 
org.quartz.scheduler.xaTransacted = false 
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool 
org.quartz.threadPool.threadCount = 3 
org.quartz.threadPool.threadPriority = 5 

org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX 
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.oracle.OracleDelegate 
org.quartz.jobStore.tablePrefix = QRTZ_ 
org.quartz.jobStore.isClustered = true 
org.quartz.jobStore.clusterCheckinInterval = 20000 
org.quartz.jobStore.useProperties = false 
org.quartz.jobStore.selectWithLockSQL = SELECT * FROM {0}LOCKS WHERE LOCK_NAME = ? FOR UPDATE 
org.quartz.jobStore.txIsolationLevelSerializable = false 

org.quartz.jobStore.dataSource = myDS 
org.quartz.dataSource.myDS.jndiURL = java:myDS 

org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.JobInitializationPlugin 
org.quartz.plugin.jobInitializer.fileName = quartz-jobs.xml 
org.quartz.plugin.jobInitializer.failOnFileNotFound = true 
org.quartz.plugin.jobInitializer.overWriteExistingJobs = true 
org.quartz.plugin.jobInitializer.scanInterval = 600 
     </attribute>  
    </mbean> 
</server>