Spring 在Quartz JDBC支持的集群的每个节点上运行作业
我有一个由两个运行SpringWeb应用程序的Tomcat节点组成的集群。我配置了一个Spring 在Quartz JDBC支持的集群的每个节点上运行作业,spring,cluster-computing,quartz-scheduler,Spring,Cluster Computing,Quartz Scheduler,我有一个由两个运行SpringWeb应用程序的Tomcat节点组成的集群。我配置了一个RAMJobStore,并切换到LocalDataSourceJobStore,以提供集群,使每个作业最多在一个节点上运行。大多数作业(包括一些新作业)都在数据库上操作,并从该功能中获益 不幸的是,我有一项工作是对RAM中的数据进行操作,并且没有同步设置。我能看到的最简单的解决方案是,一个作业只需在所有节点上运行,而无需协调,就像它在RAMJobStore中所做的那样 是否有方法将作业配置为在LocalData
RAMJobStore
,并切换到LocalDataSourceJobStore
,以提供集群,使每个作业最多在一个节点上运行。大多数作业(包括一些新作业)都在数据库上操作,并从该功能中获益
不幸的是,我有一项工作是对RAM中的数据进行操作,并且没有同步设置。我能看到的最简单的解决方案是,一个作业只需在所有节点上运行,而无需协调,就像它在RAMJobStore
中所做的那样
是否有方法将作业配置为在LocalDataSourceJobStore下的所有节点上运行?
精确的定时并不重要,但作业必须每30分钟在每个节点上运行一次我没有尝试过这一点,但我认为您可以配置两个调度程序,一个用于集群作业,另一个用于RAM作业存储。如果使用spring,那么您可以这样配置 对于集群存储
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="configLocation" value="classpath:quartz.properties" />
...... configure your clustered triggers here
</bean>
...... 在此处配置集群触发器
然后为RAM存储设置另一个具有不同quartz.properties文件的调度程序
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="configLocation" value="classpath:quartz_ram.properties" />
...... configure your RAM store triggers here
</bean>
...... 在此处配置RAM存储触发器
试过了。似乎存在一些通过静态或线程局部变量共享的状态,您会得到错误。