Ответ 1
<property name="cronExpression" value="0 0/30 * * * ?" />
У меня есть следующее задание Spring для запуска через каждые 30 минут. Пожалуйста, проверьте мое выражение cron, это правильно?
"0 0 0 * * 30"
Ниже приведено полное определение задания cron из соответствующего файла конфигурации Spring:
<bean id="autoWeblogPingTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="jobDetailForWeblogPing"/>
<!-- run every 35 minutes -->
<property name="cronExpression" value="0 0 0 * * 30" />
</bean>
<property name="cronExpression" value="0 0/30 * * * ?" />
В соответствии с Учебник Quartz-Scheduler
Это должно быть value="0 0/30 * * * ?"
Порядок полей выражения cronExpression
1.Seconds
2.Minutes
3.Hours
4.Day-оф-Месяц
5.Month
6.Day-недельного
7.Year(необязательное поле)
Убедитесь, что у вас есть как минимум 6 параметров, или вы получите ошибку (год не является обязательным)
Графически синтаксис cron для Quarz (источник):
+-------------------- second (0 - 59)
| +----------------- minute (0 - 59)
| | +-------------- hour (0 - 23)
| | | +----------- day of month (1 - 31)
| | | | +-------- month (1 - 12)
| | | | | +----- day of week (0 - 6) (Sunday=0 or 7)
| | | | | | +-- year [optional]
| | | | | | |
* * * * * * * command to be executed
Поэтому, если вы хотите запускать команду каждые 30 минут, вы можете сказать одно из следующих:
0 0/30 * * * * ?
0 0,30 * * * * ?
Вы можете проверить выражения crontab, используя одно из следующих:
в веб-приложении Java Spring, что работает для меня
cron="0 0/30 * * * ?"
Это сработает, например, в 10:00, затем в 10:30 и т.д.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:task="http://www.springframework.org/schema/task"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task.xsd">
<beans profile="cron">
<bean id="executorService" class="java.util.concurrent.Executors" factory-method="newFixedThreadPool">
<beans:constructor-arg value="5" />
</bean>
<task:executor id="threadPoolTaskExecutor" pool-size="5" />
<task:annotation-driven executor="executorService" />
<beans:bean id="expireCronJob" class="com.cron.ExpireCron"/>
<task:scheduler id="serverScheduler" pool-size="5"/>
<task:scheduled-tasks scheduler="serverScheduler">
<task:scheduled ref="expireCronJob" method="runTask" cron="0 0/30 * * * ?"/> <!-- every thirty minute -->
</task:scheduled-tasks>
</beans>
</beans>
Я не знаю почему, но это работает на мою местную разработку и производство, но другие изменения, если я сделал, я должен быть осторожным, потому что это может работать локально и на разработке, но не на производстве
Если кто-то использует @Sceduled, это может сработать для вас.
@Scheduled(cron = "${name-of-the-cron:0 0/30 * * *?}")
Это сработало для меня.