tasks scheduled minutes examples every create java spring configuration annotations scheduling

java - examples - spring scheduled cron every 5 minutes



¿Cómo se parametriza @Scheduled(fixedDelay) con el lenguaje de expresiones Spring 3.0? (4)

Al utilizar la función Spring 3.0 para anotar una tarea programada, me gustaría establecer el parámetro fixedDelay como mi archivo de configuración, en lugar de instalarlo en mi clase de tareas, como actualmente ...

@Scheduled(fixedDelay = 5000) public void readLog() { ... }

Desafortunadamente, parece que con los medios del Lenguaje de Expresión de Primavera (SpEL) @Value devuelve un objeto String que a su vez no puede ser auto-encajonado a un valor largo como lo requiere el parámetro fixedDelay .


Puede usar la anotación @Scheduled , pero solo con el parámetro cron :

@Scheduled(cron = "${yourConfiguration.cronExpression}")

Su intervalo de 5 segundos podría expresarse como "*/5 * * * * *" . Sin embargo, como entiendo, no puedes proporcionar menos de 1 segundo de precisión.


Spring v3.2.2 ha agregado los parámetros de cadena a los 3 parámetros largos originales para manejar esto. fixedDelayString , fixedRateString y initialDelayString ahora también están disponibles.

@Scheduled(fixedDelayString = "${my.fixed.delay.prop}") public void readLog() { ... }


Supongo que la anotación @Scheduled está fuera de duda. Entonces, tal vez una solución para usted sería usar la configuración XML task-scheduled . Consideremos este ejemplo (copiado de Spring doc ):

<task:scheduled-tasks scheduler="myScheduler"> <task:scheduled ref="someObject" method="readLog" fixed-rate="#{YourConfigurationBean.stringValue}"/> </task:scheduled-tasks>

... o si el elenco de String to Long no funcionó, algo como esto sería:

<task:scheduled-tasks scheduler="myScheduler"> <task:scheduled ref="someObject" method="readLog" fixed-rate="#{T(java.lang.Long).valueOf(YourConfigurationBean.stringValue)}"/> </task:scheduled-tasks>

De nuevo, no he probado ninguna de estas configuraciones, pero espero que te pueda ayudar un poco.


Supongo que puedes convertir el valor tú mismo definiendo un bean. No lo he intentado , pero creo que el enfoque similar al siguiente podría ser útil para usted:

<bean id="FixedDelayLongValue" class="java.lang.Long" factory-method="valueOf"> <constructor-arg value="#{YourConfigurationBean.stringValue}"/> </bean>

dónde:

<bean id="YourConfigurationBean" class="..."> <property name="stringValue" value="5000"/> </bean>