2014-01-20 4 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

Вы работаете Quartz на JBoss так что попробуйте использовать HASingleton для управления главного узла - то вам не нужно использовать кластеризацию, представленную Quartz, который использует базу данных и вызывает проблемы.

HASingleton доступен начиная с JBoss 4 или 5. Если вы используете версию 7, то вы можете посмотреть на this post подробности о его реализации

+0

Спасибо за отзыв. Но похоже, что они хотели использовать кварц. – user3216514

+0

Пожалуйста, не делайте этого :-) Мы пробовали и ударили по стене, синхронизируя на db –

0

Вот определение службы кварца из моего проекта. Все задания описаны в quartz-jobs.xml, которые запускают EJB, используя EJB3Invoker. Я надеюсь, что это помогает.

кварц-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> 
Смежные вопросы