что именно запускает задание Quarz Cron весной?
-
13-09-2019 - |
Вопрос
хорошие люди.Я пытаюсь использовать кварц с пружиной в очень простом проекте, управляемом 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.И метод — это метод, который существует в этом объекте.