我有一个2节点的HA服务器。节点1处于活动状态,节点2处于待机状态。
我已经制作了一个应用程序,并使用quartz api进行聚类。我已经在db中创建了所有表。
现在我需要在节点或jst节点1中运行模块,这样当节点1关闭时,应用程序会自动在节点2中启动。
在两个节点中运行模块时,触发器和作业名称应相同还是不同?
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 10
org.quartz.threadPool.threadPriority = 5
org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true
- 使用RAMJobStore
- 如果使用RAMJobStore,请确保注释掉
- org.quartz.jobStore.tablePrefix,org.quartz.jobStore.driverDelegateClass,org.quartz.jobStore.dataSource
-org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore
- 使用JobStoreTX
- 请务必先运行相应的脚本(在docs / dbTables下)以创建数据库/表
org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
- 使用DriverDelegate
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate
- 群集的新配置
org.quartz.jobStore.isClustered = true
org.quartz.jobStore.clusterCheckinInterval = 20000
org.quartz.scheduler.instanceId = AUTO
org.quartz.scheduler.instanceId = AUTO
org.quartz.scheduler.instanceName = MyClusteredScheduler
- 使用表前缀配置JDBCJobStore
org.quartz.jobStore.tablePrefix = QRTZ _
- 使用数据源
org.quartz.jobStore.dataSource = qzDS
- 定义要使用的数据源
org.quartz.dataSource.qzDS.driver = oracle.jdbc.driver.OracleDriver
org.quartz.dataSource.qzDS.URL = jdbc:oracle:thin:@ 10.172.16.147:1521:emadb0
org.quartz.dataSource.qzDS.user = BLuser
org.quartz.dataSource.qzDS.password = BLuser
org.quartz.dataSource.qzDS.maxConnections = 30
答案 0 :(得分:2)
根据: http://quartz-scheduler.org/documentation/quartz-2.x/configuration/ConfigJDBCJobStoreClustering
特别是:
群集当前仅适用于JDBC-Jobstore(JobStoreTX或JobStoreCMT),实际上是通过让群集的每个节点共享同一个数据库来工作。
负载平衡自动发生,群集中的每个节点都尽可能快地触发作业。当触发器的触发时间发生时,获取它的第一个节点(通过锁定它)是将触发它的节点。
你应该启动所有节点,最快将触发工作,其他人将知道它。