/ / Übergeben Sie einen YAML-basierten Eigenschaftswert an @Scheduled-Annotation im Spring Boot - Spring, Spring-Boot

Übergeben Sie einen YAML-basierten Eigenschaftswert an @Scheduled-Annotation im Spring Boot - Spring, Spring-Boot

Diese Frage ist möglicherweise ein Duplikat dieses älteren Frage.

Ich arbeite an einem Spring Boot 1.4 Anwendung und ich habe eine Methode einer Bean kommentiert mit @Scheduled. Ich muss den Cron-Wert an die Annotation übergeben, und da ich die YAML-basierte Konfiguration verwende, wird der Cron-Wert in der YAML-Datei gespeichert (application.yaml).

Ich kann keinen Weg finden, den Wert der Immobilie zu übergeben app.cron zur Anmerkung.

Zum Beispiel funktioniert das nicht

@Scheduled(cron = ${app.cron})

Ich habe auch versucht, EL Ausdruck zu verwenden, aber kein Glück.

Was ist der richtige Weg, um einen YAML-basierten Eigenschaftswert an eine Spring-Anmerkung zu übergeben?

Antworten:

3 für die Antwort № 1

Versuchen Sie es zuerst in ein Javaconfig zu legen und es sollte mit EL funktionieren:

@Configuration
@ConfigurationProperties(prefix = "app")
public class CronConfig() {
private String cron;

@Bean
public String cron() {
return this.cron;
}

public void setCron(String cron) {
this.cron = cron;
}
}

Und benutze es mit @Scheduled(cron = "#{@cron}")

Ich habe das nicht für geplante Taks versucht, aber ich hatte ein ähnliches Problem, wenn ich etwas in eine Annotation injiziere.


2 für die Antwort № 2

Sie können dies auch tun:

@Configuration
public class CronConfig() {

@Value("${app.cron}")
private String cronValue;

@Bean
public String cronBean() {
return this.cronValue;
}
}

Und benutze es mit @Scheduled (cron = "# {@ cronBean}")

In diesem Fall erhalten Sie den Wert von "app.cron" aus der Anwendung application.properties oder application.yml von Spring, die Sie in Ihrem Projekt konfiguriert haben.

Hinweis:

Es gibt einen kleinen Fehler im Code von Dennis:

Die Methode cron () ruft sich selbst auf:

@Bean
public String cron() {
return this.cron(); // It"s calling itself
}

Also, wenn Sie diesen Code ausführen, erhalten Sie und StackOverFlow Exception.