-1

私はQuartzスケジューラを使用して、毎日特定の時間に自動メールをプッシュしています。私のアプリケーションは 2 つのクラスターで構成されていました。両方のクラスタのスケジューラが同時に起動し、重複した電子メールをユーザーに送信しています。スケジューラが 1 つだけ起動するようにするコードを教えてください。グーグルで調べたところ、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 に答える