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

Al utilizar la función Spring 3.0 para anotar una tarea progtwigda, 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 .

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 ):

    

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

    

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

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() { ... } 

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

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

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

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:

    

dónde: