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