2011-11-02 8 views
36

Mam następujące zadanie Spring do uruchomienia po każdych 30 minutach. Proszę sprawdzić moje wyrażenie crona, czy to prawda?Wyrażenie wiosny cron dla każdego po 30 minutach

"0 0 0 * * 30"


Oto pełna definicja zadania cron od związanego Wiosna konfiguracji file:

<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> 
+4

Nie pomaga, że ​​Spring zdecydował się nie używać formatu cron, ale nazwał go "cronExpression" –

+0

@JosephLust - to prawda. Również w wiosennym dokumencie, nie ma żadnej wzmianki o tej różnicy ... wiosna cron jest w stanie zapewnić sekundowanie, ale normalny unix cron jest oparty na minutach ... jak na unixowych stronach man minuta to najmniejsza jednostka czasu, którą można skonfigurować . – nanosoft

Odpowiedz

36
<property name="cronExpression" value="0 0/30 * * * ?" /> 
93

Według Quartz-Scheduler Tutorial Powinno być value="0 0/30 * * * ?"

Kolejność Dziedziną cronExpression jest

1.Seconds

2.Minutes

3.Hours

4.Day-comiesięczne

5.Month

6.Dni tygodnia

7.Year (pole opcjonalne)

Sprawdź, czy masz co najmniej 6 parametrów lub dostaniesz błąd (rok jest opcjonalny)

+5

Kwarc wymaga dodatkowego pola zgodnie z ich dokumentami. Myślę, że byłby to "0 0/30 * * *?". Ogólne podejście jest poprawne, ale –

+0

wydaje się być poprawnym –

+0

układacz rzuca wyjątek Właściwość "cronExpression" rzucił wyjątek; Zagnieżdżony wyjątek to java.text.ParseException: nieoczekiwany koniec wyrażenia. –

29

Graficznie, składnia cron dla Quarz jest (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 

Więc jeśli chcesz uruchomić komendę co 30 minut, można powiedzieć, jeden z nich:

0 0/30 * * * * ? 
0 0,30 * * * * ? 

Możesz sprawdzić wyrażenia crontab używając crontab.guru (uwaga: nie jestem w ogóle związany z tą stroną, tylko że uważam ją za bardzo użyteczną). Weź jednak pod uwagę, że ta strona używa stylu UNIX crona, który nie ma w nim sekund, podczas gdy Spring jest pierwszym polem.

+1

Zauważ, że crontab.guru używa stylu cx, który nie ma w nim sekund. Spring cron używa sekund, więc pierwsze pole jest drugie. –

+0

@GaneshKrishnan dobry punkt. Dodano go w odpowiedzi. Dzięki! – fedorqui

1

w web app java wiosny co pracował dla mnie

0 0/30 * * *?

Spowoduje to na przykład 10:00, a następnie 10:30 etc ...

<?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> 

Nie wiem dlaczego, ale to działa na moim lokalnym opracowania i produkcji, ale inne zmiany, jeśli zrobiłem Muszę być ostrożny, ponieważ może działać lokalnie i rozwijać się, ale nie na produkcji

Powiązane problemy