基本上Rene M.是正确的。这是与Quartz有关的文档:
http://www.quartz-
scheduler.org/documentation/quartz-2.2.x/configuration/ConfigJDBCJobStoreClustering.html
现在介绍一些我们自己在公司使用的背景和概念性示例。我们 在
Wildfly群集中使用石英群集模式。也就是说,每个Wildfly群集节点都运行石英。由于quartz本身以群集模式运行,并且指向相同的数据库模式,因此我们保证每个
群集 运行一个作业。同样,请参阅文档。关键问题是:
单个石英群集必须针对单个石英数据库
架构运行。显然,您必须根据文档创建关系数据库表。没关系您必须正确设置quartz.property文件,并且群集中的每个节点都必须存在一个副本。 完全相同的quartz.property文件
- 最后,您必须使用NonJTA数据源,否则石英群集将失败。这通常意味着在Wildfly世界中,石英将需要其自己的数据源。
石英石属性示例:
#============================================================================# Configure Main Scheduler Properties #============================================================================org.quartz.scheduler.instanceName = BjondSchedulerorg.quartz.scheduler.instanceId = AUTO#============================================================================# Configure ThreadPool #============================================================================org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPoolorg.quartz.threadPool.threadCount = 5#============================================================================# Configure JobStore #============================================================================org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreCMTorg.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.PostgreSQLDelegateorg.quartz.jobStore.useProperties = falseorg.quartz.jobStore.tablePrefix=QRTZ_org.quartz.jobStore.isClustered = trueorg.quartz.jobStore.clusterCheckinInterval = 5000org.quartz.scheduler.wrapJobExecutionInUserTransaction = trueorg.quartz.scheduler.userTransactionURL = java:jboss/UserTransactionorg.quartz.jobStore.dataSource = PostgreSQLDSorg.quartz.jobStore.nonManagedTXDataSource = PostgreSQLDSNoJTAorg.quartz.dataSource.PostgreSQLDSNoJTA.jndiURL=java:jboss/datasources/PostgreSQLDSNoJTAorg.quartz.dataSource.PostgreSQLDS.jndiURL=java:jboss/datasources/PostgreSQLDS#============================================================================# Configure Logging#============================================================================#org.quartz.plugin.jobHistory.class=org.quartz.plugins.history.LoggingJobHistoryPlugin#org.quartz.plugin.jobHistory.jobToBeFiredMessage=Bjond Job [{1}.{0}] to be fired by trigger [{4}.{3}] at: {2, date, HH:mm:ss MM/dd/yyyy} re-fire count: {7}#org.quartz.plugin.jobHistory.jobSuccessMessage=Bjond Job [{1}.{0}] execution complete and reports: {8}#org.quartz.plugin.jobHistory.jobFailedMessage=Bjond Job [{1}.{0}] execution failed with exception: {8}#org.quartz.plugin.jobHistory.jobWasVetoedMessage=Bjond Job [{1}.{0}] was vetoed. It was to be fired by trigger [{4}.{3}] at: {2, date, dd-MM-yyyy HH:mm:ss.SSS}现在,standalone.xml中的数据源代码段:
<datasource jta="false" jndi-name="java:jboss/datasources/PostgreSQLDSNoJTA" pool-name="PostgreSQLDSNoJTA" enabled="true" use-java-context="true" use-ccm="true">
您可以根据需要填写此数据源元素的其余部分。@DisallowConcurrentExecution是一个好主意,它可以防止单个节点上的多个作业执行特定的方法,但是石英集群阻止了同一作业在多个VM上运行。不是这个注释。



