Вопрос

хорошие люди.Я пытаюсь использовать кварц с пружиной в очень простом проекте, управляемом maven. Итак, в модуль, в котором находится класс задания mycron, я включил в него основной класс Java, просто чтобы увидеть, как задание выводит некоторый текст и новую дату.вот моя весенняя конфигурация:

<!--Scheduling-->
<!--Job-->
    <bean id="projUpdater" class="org.springframework.scheduling.quartz.JobDetailBean">
        <property name="jobClass" value="com.myproject.utilscheduling.quartz.ProjUpdaterCronImpl" />
    </bean>
<!---End of Jobs-->
<!--Triggers-->
    <bean id="regularUpdateTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
        <property name="jobDetail" ref="projUpdater"/>
        <property name="cronExpression" value="30 1 * * * ?"/>
    </bean>
<!--End ofTriggers-->
<!--Scheduler Factory-->
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
    <property name="triggers">
        <list>
            <ref bean="regularUpdateTrigger"/>
        </list>
    </property>
</bean>
<!--End of Scheduler Factory-->
<!--End of Scheduling-->

а вот класс работы

public class ProjUpdaterCronImpl extends QuartzJobBean {

public ProjUpdaterCronImpl() {
}


protected void executeInternal (JobExecutionContext ctx) throws JobExecutionException {
    System.out.println("[JOB] " + new Date() + "hello");
}

}

вот основной класс

public class NewMain {

/**
 * @param args the command line arguments
 */
 public static void main(String[] args) {
    System.out.println("starting job");
 }

}

поэтому, насколько я понимаю, задание будет запущено через 1 минуту 30 секунд и опубликовано на консоли. Я ошибаюсь. Я столкнулся с парой ошибок, которые я решаю, поэтому я могу с уверенностью предположить, что в файле конфигурации Spring нет ошибок, поскольку их нет, когда строим и запускаем. Так что же я сделал не так или что забыл сделать?

Вторая проблема, поскольку я заставляю себя идти по пути тестирования, как я смогу протестировать класс задания cron?Спасибо за прочтение

Это было полезно?

Решение

Ваше выражение cron

<property name="cronExpression" value="30 1 * * * ?"/>

фактически настраивает триггер на срабатывание один раз каждый час через 1 минуту 30 секунд после часа.

Предложение Зойдберга использовать MethodInvokingJobDetailFactoryBean позволяет вам запрограммировать задание cron как POJO, что упрощает его тестирование.

Другие советы

Попробуйте это для своего рабочего компонента.

<bean id="projUpdater" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <property name="targetObject" ref="registeredObject" />
        <property name="targetMethod" value="methodNameInObject" />
    </bean>

Где ваш зарегистрированный объект — это bean-компонент, зарегистрированный где-то в конфигурации Spring.И метод — это метод, который существует в этом объекте.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top