Quartz集群不起作用

时间:2014-01-20 22:11:03

标签: java quartz-scheduler

我在Jboss下使用我的应用程序(数据库是informix),使用quartz进行调度。 当我在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

3 个答案:

答案 0 :(得分:0)

您正在JBoss上运行Quartz,因此请考虑使用HASingleton来控制主节点 - 然后您不需要使用Quartz提供的集群,Quartz会使用数据库并导致问题。

HASingleton自JBoss 4或5开始可用。如果您使用的是版本7,那么您可以查看this post了解其实现的详细信息

答案 1 :(得分: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>  

答案 2 :(得分:0)

我想我找到了解决方案!

我通过这样做禁用了作业文件的自动扫描:

org.quartz.plugin.jobInitializer.scanInterval = 0 

现在群集对我来说非常好。

首先启动调度程序时,JobInitializationPlugin仍将从xml文件创建作业,但之后不会扫描任何更改。