这个问题可能与旧的question重复。
我正在开发一个 Spring Boot 1.4 应用程序,我有一个用@Scheduled
注释的bean方法。
我需要将cron值传递给注释,因为我使用的是基于YAML的配置,所以cron值存储在YAML文件中(application.yaml
)。
我找不到将属性值app.cron
传递给注释的方法。
例如,这不起作用
@Scheduled(cron = ${app.cron})
我也试过使用EL表达式,但没有运气。
将基于YAML的属性值传递给Spring注释的正确方法是什么?
答案 0 :(得分:4)
首先尝试将它放在Javaconfig中,它应该与EL一起使用:
@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;
}
}
并将其与@Scheduled(cron = "#{@cron}")
我没有为预定的Taks尝试这个,但我在注释中注入了类似的问题。
答案 1 :(得分:3)
你也可以这样做:
@Configuration
public class CronConfig() {
@Value("${app.cron}")
private String cronValue;
@Bean
public String cronBean() {
return this.cronValue;
}
}
与@Scheduled一起使用(cron ="#{@ cronBean}")
在这种情况下,您将获得" app.cron"的价值。来自Spring的application.properties或application.yml,您在项目中配置的那个。
注意:
Dennis发布的代码中有一点错误:
方法cron()调用自己:
@Bean
public String cron() {
return this.cron(); // It's calling itself
}
因此,如果您运行此代码,您将获得和StackOverFlow异常。