Кварцевая пружина CronTrigger сработала больше, чем настроено - PullRequest
4 голосов
/ 20 июля 2010

У меня есть cronTrigger для задания "digestJob":

<bean id="digestCronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"> 
    <property name="jobDetail" ref="digestJob" />
    <property name="cronExpression" value="0 35 15 * * ?" />
</bean>

Вот мой планировщик FactoryBean конфигурации:

<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="triggers">
            <list>
                <ref bean="digestCronTrigger" />   
            </list>
        </property>
    </bean>

Проблема в том, что digestCronTrigger должен запускаться ОДНАЖДЫ каждый день в 17:35, но он запускается ДВАЖДЫ в указанное время. Однако, когда я использую SimpleTrigger:

<bean id="digestTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
        <property name="jobDetail" ref="digestJob" />
        <property name="startDelay" value="0" />
        <property name="repeatInterval" value="10000" />
    </bean>

все работает нормально, а триггер срабатывает ровно раз в 10 секунд. Почему digestCronTrigger запускается дважды? Что-то не так с моим выражением cron, или есть какое-то свойство, которое мне не хватает? Любая помощь будет высоко ценится.

Ответы [ 3 ]

4 голосов
/ 26 июля 2010

Я разместил тот же вопрос на springsource форумах , где мне помогли выяснить причину проблемы: Я загружал контекст приложения дважды. Позже я узнал из этого поста , как избежать двойной загрузки контекста. Теперь все работает нормально.

1 голос
/ 30 июня 2016

Это также может произойти, если вы создаете триггер при запуске приложения и используете источник данных в файле quartz.properties. Каждый раз, когда вы запускаете сервер, он записывает новый триггер в таблицы QRTZ_CRON_TRIGGERS и QRTZ_TRIGGERS и использует их все при каждом перезапуске.

0 голосов
/ 20 июля 2010

Попробуйте это:

    <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="triggers">
            <list>
                <ref bean="cronTrigger" />
            </list>
        </property>
    </bean>

    <bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
      <property name="targetObject" ref="actionObject" />
      <property name="targetMethod" value="actionMethod" />
    </bean>

    <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
        <property name="jobDetail" ref="jobDetail"/>
        <property name="cronExpression" value="0 15 17 * * ?"/>
    </bean>
...