Весеннее выражение cron за каждые 30 минут - PullRequest
52 голосов
/ 02 ноября 2011

У меня есть следующее весеннее задание, запускаемое через каждые 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>

Ответы [ 5 ]

112 голосов
/ 02 ноября 2011

Согласно Кварцевому планировщику Это должно быть value="0 0/30 * * * ?"

Порядок полей выражения cronExx:

1.Seconds

2.Minutes

3.Hours

4.Day-оф-месяц

5.Month

6.Day-оф-Неделя

7.Year (необязательное поле)

Убедитесь, что у вас есть как минимум 6 параметров, иначе вы получите ошибку (год необязательный)

53 голосов
/ 28 июля 2016

Графически синтаксис cron для Quarz: ( source ):

+-------------------- 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, используя одно из следующих:

  • crontab.guru - (заявление об отказе: я вообще не связан с этой страницей, толькочто я нахожу это очень полезным).На этой странице используется стиль cron в UNIX, в котором нет секунд, а в качестве первого поля используется Spring.
  • Cron Expression Generator и Explainer - Quartz - cron formatter, также позволяющий использовать секунды.
44 голосов
/ 10 ноября 2011
<property name="cronExpression" value="0 0/30 * * * ?" />
7 голосов
/ 23 мая 2017

в веб-приложении 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>

Я не знаю, почему, но это работает на мою местную разработку и производство, но другие изменения, если я сделал, я должен быть осторожным, потому что это может работать локально и на разработке, но не на производстве

0 голосов
/ 28 марта 2019

Если кто-то использует @Sceduled, это может сработать для вас.

@Scheduled(cron = "${name-of-the-cron:0 0/30 * * * ?}")

Это сработало для меня.

...