2011-11-02 39 views
36

Tengo el siguiente trabajo de primavera para ejecutar después de cada 30 minutos. Por favor revisa mi expresión cron, ¿es correcto?Expresión cron de primavera para cada 30 minutos

"0 0 0 * * 30"


He aquí una definición de trabajo de cron completa de la Primavera relacionados con la configuración archivo:

<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

No ayudo que Spring eligió no usar el formato cron, pero lo llamó 'cronExpression' –

+0

@JosephLust - eso es muy cierto. También en el documento de primavera, no hay mención de esta diferencia ... spring cron puede proporcionar segundos de provisión también, pero el cron de unix normal está basado en minutos ... como en las páginas man de unix, el minuto es la unidad de tiempo más pequeña que se puede configurar . – nanosoft

Respuesta

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

De acuerdo con la Quartz-Scheduler Tutorial Debe ser value="0 0/30 * * * ?"

El orden de los campos de la cronExpression es

1.Seconds

2.Minutes

3.Hours

4.Day de mes

5.Month

6. Día de la semana

7.Year (campo opcional)

Asegúrese de que tiene al menos 6 parámetros o se obtendrá un error (año es opcional)

+5

Quartz requiere un campo adicional según sus documentos. Sería '0 0/30 * * *?', Creo. La aproximación general es correcta aunque –

+0

parece correcto –

+0

apilador arroja la excepción La propiedad 'cronExpression' arrojó una excepción; la excepción anidada es java.text.ParseException: final de expresión inesperado. –

29

Gráficamente, la sintaxis cron para Quarz es (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 

lo tanto, si desea ejecutar un comando cada 30 minutos se puede decir cualquiera de estos:

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

Puede verificar expresiones de crontab usando crontab.guru (descargo de responsabilidad: no estoy relacionado con esa página en absoluto, solo que la encuentro muy útil). Tenga en cuenta, sin embargo, que esta página utiliza el estilo UNIX de cron que no tiene segundos, mientras que Spring lo hace como el primer campo.

+1

Tenga en cuenta que crontab.guru usa el estilo Unix de cron que no tiene segundos. Spring cron usa segundos por lo que el primer campo es el segundo. –

+0

@GaneshKrishnan buen punto. Lo agregué en la respuesta ¡Gracias! – fedorqui

1

en primavera Web aplicación de java lo que funcionó para mí

0 0/30 * * *?

Esto desencadenará en, por ejemplo, 10 a.m. a continuación, 10:30 AM 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> 

No sé por qué, pero esto está funcionando en mi local de desarrollo y producción, pero otros cambios si he hecho Tengo que tener cuidado porque puede funcionar localmente y en desarrollo pero no en producción.

Cuestiones relacionadas