作为映射的Springboot yaml属性不起作用

时间:2018-01-23 16:00:24

标签: java spring-boot

我正在使用Spring boot 1.5.9。我无法让这个简单的配置类工作。我在这里缺少什么?

yaml文件:

lala:
  jobs:
    foo1: bar
    foo2: bar
  foo: lala

配置类:

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;

import java.util.HashMap;
import java.util.Map;

@Configuration
@ConfigurationProperties(prefix = "lala", ignoreUnknownFields = false)
@PropertySource("classpath:jobs.yml")
public class Jobs {
    private Map<String, String> jobs = new HashMap<>();
    private String foo;

    public Map<String, String> getJobs() {
        return jobs;
    }

    public void setJobs(Map<String, String> jobs) {
        this.jobs = jobs;
    }

    public String getFoo() {
        return foo;
    }

    public void setFoo(String foo) {
        this.foo = foo;
    }

    @Override
    public String toString() {
        return "Jobs{" +
                "jobs=" + jobs +
                ", foo='" + foo + '\'' +
                '}';
    }
}

我一直在:Jobs{jobs={}, foo='null'}

2 个答案:

答案 0 :(得分:1)

You can't load YAML the way you're doing it now.

  

无法通过@PropertySource注释加载YAML文件。因此,如果您需要以这种方式加载值,则需要使用属性文件。

主要的替代方法是使用application.yml文件而不是专用的jobs.yml文件。如果您必须有分离,那么您唯一的选择是使用属性文件。

答案 1 :(得分:0)

您可以使用YAML工厂构建器。

在XML中:

<beans:bean id="configProperties" class="org.springframework.beans.factory.config.YamlPropertiesFactoryBean">
        <beans:property name="resources">
             <beans:list>
                <beans:value>WEB-INF/sheduled-task.yml</beans:value>
                <beans:value>WEB-INF/app-config.yml</beans:value>
             </beans:list>
        </beans:property>
    </beans:bean>

在字符串启动配置类中:

@Bean
    public static PropertySourcesPlaceholderConfigurer properties() {
      PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer = new PropertySourcesPlaceholderConfigurer();
      YamlPropertiesFactoryBean yaml = new YamlPropertiesFactoryBean();
      yaml.setResources(new ClassPathResource("sheduled-task.yml"), new ClassPathResource("app-config.yml"));
      propertySourcesPlaceholderConfigurer.setProperties(yaml.getObject());
      return propertySourcesPlaceholderConfigurer;
    }

在@PropertySource批注中,您可以添加.properties文件