我在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
答案 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文件创建作业,但之后不会扫描任何更改。