我正在使用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'}
答案 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文件