Come parametrizzare @Scheduled (fixedDelay) con linguaggio di espressione Spring 3.0?

Quando si utilizza la funzionalità Spring 3.0 per annotare un’attività pianificata, vorrei impostare fixedDelay come parametro dal mio file di configurazione, invece di collegarlo in modo fisso alla mia task class, come al momento …

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

Sfortunatamente sembra che con i mezzi di Spring Expression Language (SpEL) @Value restituisca un object String che a sua volta non è in grado di essere auto-boxato su un valore lungo come richiesto dal parametro fixedDelay .

Immagino che l’annotazione @Scheduled sia fuori questione. Quindi forse una soluzione per voi sarebbe quella di utilizzare la configurazione XML task-scheduled le attività. Consideriamo questo esempio (copiato da Spring doc ):

    

… o se il cast da String a Long non ha funzionato, qualcosa del genere avrebbe:

    

Ancora una volta, non ho provato nessuna di queste configurazioni, ma spero che possa aiutarti un po ‘.

Spring v3.2.2 ha aggiunto i parametri String ai 3 parametri lunghi originali per gestirli. fixedDelayString , fixedRateString e initialDelayString sono ora disponibili anche.

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

Puoi utilizzare l’annotazione @Scheduled , ma solo con il parametro cron :

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

Il tuo intervallo di 5 secondi potrebbe essere express come "*/5 * * * * *" . Tuttavia, come ho capito, non è ansible fornire una precisione inferiore a 1 secondo.

Immagino che tu possa convertire tu stesso il valore definendo un bean. Non l’ho provato , ma suppongo che l’approccio simile al seguente potrebbe essere utile per voi:

    

dove: