-1

我正在使用 Quartz 调度程序在每天特定时间推送自动电子邮件。我的应用程序配置在两个集群中。两个集群中的调度程序同时触发并向用户发送重复的电子邮件。请向我推荐代码以确保只有一个调度程序会触发。我已经完成了谷歌搜索,发现 JDBC-JobStore 将解决这个问题。但我不想在数据库中存储计划信息。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>
4

1 回答 1

2

通常每个服务器的 RAM 是分开的,因此两个集群成员同时触发其调度程序的行为是可以预料的。如果您不想使用数据库进行同步,您可以使用像 Hazelcast 这样的内存网格解决方案。实际上有一个项目可以使用 Hazelcast 和 Quartz 实现您的用例: https ://github.com/mufumbo/quartz-hazelcast

于 2013-10-14T13:15:11.423 回答