java - minutes - Expresión cron de primavera para cada 30 minutos después.
spring boot scheduled task example (4)
De acuerdo con el tutorial de Quartz-Scheduler , debería ser value="0 0/30 * * * ?"
El orden de campo de la expresión cron es
1. Segundos
2 minutos
3 horas
4.Día del mes
5 meses
6.Día de la semana
7.Year (campo opcional)
Asegúrese de tener al menos 6 parámetros o recibirá un error (el año es opcional)
Tengo que seguir el trabajo de primavera después de cada 30 minutos. Por favor, compruebe mi expresión cron, ¿es correcto?
"0 0 0 * * 30"
Aquí hay una definición de trabajo cron completa del archivo de configuración de Spring relacionado:
<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>
En la aplicación web java spring lo que funcionó para mí.
cron="0 0/30 * * * ?"
Esto se activará, por ejemplo, a las 10:00 AM y luego a las 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 desarrollo y producción locales, pero si hago otros cambios, tengo que tener cuidado porque puede funcionar localmente y en desarrollo pero no en producción
Gráficamente, la sintaxis cron para Quarz es ( fuente ):
+-------------------- 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
Entonces, si desea ejecutar un comando cada 30 minutos, puede decir cualquiera de los siguientes:
0 0/30 * * * * ?
0 0,30 * * * * ?
Puedes verificar las expresiones crontab usando cualquiera de estos:
- crontab.guru - (descargo de responsabilidad: no tengo nada que ver con esa página, solo que me parece muy útil). Esta página utiliza el estilo cron de UNIX que no tiene segundos, mientras que Spring lo hace como el primer campo.
- Cron Expression Generator & Explainer - Quartz - formateador cron, permitiendo segundos también.
<property name="cronExpression" value="0 0/30 * * * ?" />