2016-03-24 13 views
6

Gibt es eine Möglichkeit, einen Getter (oder sogar eine Variable) aus einer propertyClass in Spring @Scheduledcron Konfiguration aufzurufen? Die folgende lässt sich nicht kompilieren:Spring Boot @Scheduled cron

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

ich eine Immobilie vermeiden möchte direkt Grabbing:

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

Was ist mit dem Erstellen einer Bean, die diesen Wert erhält, dann die Bean in Ihre Cron-Klasse autowiring? – mugua

+0

Ist propertyClass eine Bean oder nur eine Klasse, die statische Methoden enthält? –

+0

@KenBekov eine Bohne. – ltalhouarne

Antwort

5

Kurze Antwort - es ist nicht möglich e aus der Box.

Der als "cron-Ausdruck" in der @Scheduled-Annotation übergebene Wert wird in der Klasse ScheduledAnnotationBeanPostProcessor unter Verwendung einer Instanz der Schnittstelle StringValueResolver verarbeitet.

StringValueResolver hat 3 Implementierungen aus dem Kasten heraus - für Placeholder (z $ {}), für Embedded Werte und für Static Strings - von denen keiner kann das erreichen, was Sie suchen.

Wenn Sie unter Verwendung des Eigenschaftenplatzhalters in der Annotation um jeden Preis vermeiden müssen, entfernen Sie die Annotation und konstruieren Sie alles programmgesteuert. Sie können Tasks unter Verwendung von ScheduledTaskRegistrar registrieren, was die @Scheduled Annotation tatsächlich tut.

Ich werde vorschlagen, zu verwenden, was die einfachste Lösung ist, die funktioniert und die Tests besteht.

+0

Das ist, was ich realisiert habe. Vielen Dank! – 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

Das ist mein aktueller Code. Meine Frage bezieht sich auf die Verwendung einer Variablen oder eines Getters anstelle von '$ {my.cron.expression}' – ltalhouarne