2013-10-14 29 views
-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> 
+0

您忘記了添加代碼。 – mariomario

+0

你認爲這兩個集羣都可以訪問相同的RAM嗎? – Henry

回答

1

通常每個服務器的RAM是分開的,所以預計兩個集羣成員都會同時觸發其調度器。 如果您不想使用數據庫進行同步,則可以使用Hazelcast等內存網格解決方案。 實際上有一個項目可以完全實現Hazelcast和Quartz的使用案例: https://github.com/mufumbo/quartz-hazelcast

相關問題