我正在使用Quartz调度程序在每天特定时间推送自动电子邮件。我的应用程序配置为两个群集。两个群集中的调度程序同时触发并向用户发送重复的电子邮件。请建议我的代码,以确保只有一个调度程序将触发。 我已经完成了谷歌搜索,发现JDBC-JobStore将解决这个问题。但我不想在db中存储日程安排。 RAMJobStore会解决这个问题吗?下面是我的现有代码。
<bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="cronTrigger" />
</list>
</property>
</bean>
<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="jobDetails" />
<property name="cronExpression" value="0 51 10 * * ?"/>
</bean>
<bean id="jobDetails"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="sendEmails" />
<property name="targetMethod" value="executeJob" />
<property name="concurrent" value="false" />
</bean>
<bean id="sendEmails" class="com.westin.agi.PushNotification"></bean>
答案 0 :(得分:2)
通常每个服务器的RAM是分开的,因此预期两个集群成员同时触发调度程序的行为。 如果您不想使用数据库进行同步,则可以使用像Hazelcast这样的内存网格解决方案。 实际上有一个项目可以完全实现Hazelcast和Quartz的用例: https://github.com/mufumbo/quartz-hazelcast