在Spring Boot

时间:2016-09-22 14:42:34

标签: spring spring-boot

这个问题可能与旧的question重复。

我正在开发一个 Spring Boot 1.4 应用程序,我有一个用@Scheduled注释的bean方法。 我需要将cron值传递给注释,因为我使用的是基于YAML的配置,所以cron值存储在YAML文件中(application.yaml)。

我找不到将属性值app.cron传递给注释的方法。

例如,这不起作用

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

我也试过使用EL表达式,但没有运气。

将基于YAML的属性值传递给Spring注释的正确方法是什么?

2 个答案:

答案 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异常。