2016-03-24 26 views
6

C'è un modo per chiamare un getter (o anche una variabile) da un propertyClass in Spring @Scheduledcron configurazione? Quanto segue non può essere compilato:Spring Boot @ Schedched cron

@Scheduled(cron = propertyClass.getCronProperty()) o @Scheduled(cron = variable)

Vorrei evitare di afferrare direttamente la struttura:

@Scheduled(cron = "${cron.scheduling}") 
+0

cosa dire della creazione di un bean che ottiene quel valore, quindi dell'autowiring del bean nella classe cron? – mugua

+0

È propertyClass un bean o solo una classe che contiene metodi statici? –

+0

@KenBekov un fagiolo. – ltalhouarne

risposta

5

Risposta breve - non è possibile e fuori dalla scatola.

Il valore passato come "espressione cron" nell'annotazione @Scheduled viene elaborato nella classe ScheduledAnnotationBeanPostProcessor utilizzando un'istanza dell'interfaccia StringValueResolver.

StringValueResolver ha 3 implementazioni fuori dalla scatola - per Placeholder (ad esempio $ {}), per Embedded valori e per Static Strings - nessuno dei quali può raggiungere ciò che stai cercando.

Se è necessario evitare a tutti i costi l'utilizzo del segnaposto delle proprietà nell'annotazione, eliminare l'annotazione e creare tutto a livello di programmazione. È possibile registrare le attività utilizzando ScheduledTaskRegistrar, che è ciò che fa effettivamente l'annotazione @Scheduled.

Suggerirò di utilizzare qualunque sia la soluzione più semplice che funziona e supera i test.

+0

Questo è quello che ho capito. Grazie! – ltalhouarne

-2
@Component 
public class MyReminder { 

    @Autowired 
    private SomeService someService; 

    @Scheduled(cron = "${my.cron.expression}") 
    public void excecute(){ 
     someService.someMethod(); 
    } 
} 

in /src/main/resources/application.properties

my.cron.expression = 0 30 9 * * ? 
+0

Questo è il mio codice corrente. La mia domanda riguarda l'uso di una variabile o di un getter invece di $ {my.cron.expression} ' – ltalhouarne