如何使用YamlPropertiesFactoryBean使用Spring Framework 4.1加载YAML文件?

我有一个目前正在使用* .properties文件的弹簧应用程序,我想使用YAML文件。

我发现YamlPropertiesFactoryBean类似乎有能力做我所需要的。

我的问题是,我不知道如何在我的Spring应用程序(它使用基于注释的configuration)中使用这个类。 看来我应该使用setBeanFactory方法在PropertySourcesPlaceholderConfigurer中configuration它。

以前我使用@PropertySource加载属性文件如下:

@Configuration @PropertySource("classpath:/default.properties") public class PropertiesConfig { @Bean public static PropertySourcesPlaceholderConfigurer placeholderConfigurer() { return new PropertySourcesPlaceholderConfigurer(); } } 

如何在PropertySourcesPlaceholderConfigurer中启用YamlPropertiesFactoryBean以便我可以直接加载YAML文件? 还是有另一种方法呢?

谢谢。

我的应用程序使用基于注解的configuration,我使用的是Spring Framework 4.1.4。 我发现了一些信息,但它总是指向我的Spring Boot,就像这个 。

使用XMLconfiguration我一直在使用这个结构:

 <context:annotation-config/> <bean id="yamlProperties" class="org.springframework.beans.factory.config.YamlPropertiesFactoryBean"> <property name="resources" value="classpath:test.yml"/> </bean> <context:property-placeholder properties-ref="yamlProperties"/> 

当然,你必须对你的运行时类path有snakeyaml依赖。

我更喜欢在javaconfigurationXMLconfiguration,但我认为它不应该很难转换它。

编辑:
Javaconfiguration完整性

 @Bean public static PropertySourcesPlaceholderConfigurer properties() { PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer = new PropertySourcesPlaceholderConfigurer(); YamlPropertiesFactoryBean yaml = new YamlPropertiesFactoryBean(); yaml.setResources(new ClassPathResource("default.yml")); propertySourcesPlaceholderConfigurer.setProperties(yaml.getObject()); return propertySourcesPlaceholderConfigurer; } 

要在Spring中读取.yml文件,您可以使用下一个方法。

例如,你有这个.yml文件:

 section1: key1: "value1" key2: "value2" section2: key1: "value1" key2: "value2" 

然后定义2个Java POJO:

 @Configuration @EnableConfigurationProperties @ConfigurationProperties(prefix = "section1") public class MyCustomSection1 { private String key1; private String key2; // define setters and getters. } @Configuration @EnableConfigurationProperties @ConfigurationProperties(prefix = "section2") public class MyCustomSection1 { private String key1; private String key2; // define setters and getters. } 

现在,您可以在组件中自动装入这些bean。 例如:

 @Component public class MyPropertiesAggregator { @Autowired private MyCustomSection1 section; } 

如果你使用Spring Boot,一切都将被自动扫描和实例化:

 @SpringBootApplication public class MainBootApplication { public static void main(String[] args) { new SpringApplicationBuilder() .sources(MainBootApplication.class) .bannerMode(OFF) .run(args); } } 

如果您使用的是JUnit,那么加载YAML文件有一个基本的testing设置:

 @RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(MainBootApplication.class) public class MyJUnitTests { ... } 

如果您使用的是TestNG,则会有一个testingconfiguration示例:

 @SpringApplicationConfiguration(MainBootApplication.class) public abstract class BaseITTest extends AbstractTestNGSpringContextTests { .... }