问题描述
我正在尝试通过 spring boot @PropertySource 机制读取 YAML 配置文件,使用的工厂使用提供的 YamlMapfactorybean 解析器。
工厂的实现如下:
public class YamlPropertySourceFactory implements PropertySourceFactory {
@Override
public PropertySource<?> createPropertySource(String name,EncodedResource encodedResource) {
YamlMapfactorybean factory = new YamlMapfactorybean();
factory.setResources(encodedResource.getResource());
Map<String,Object> map = factory.getobject();
return new MapPropertySource(encodedResource.getResource().getDescription(),map);
}
}
YAML 配置文件(foo.yml)是:
yaml:
name: foo
aliases:
- abc
- xyz
对应的实体是:
@Configuration
@ConfigurationProperties(prefix = "yaml")
@PropertySource(value = "classpath:foo.yml",factory = YamlPropertySourceFactory.class)
public class YamlFooProperties {
private String name;
private List<String> aliases;
// Getters and Setters...
}
最后,我的测试类是:
@RunWith(springrunner.class)
@SpringBoottest
public class YamlFooPropertiesTest {
@Autowired
private YamlFooProperties yamlFooProperties;
@Test
public void whenFactoryProvidedThenYamlPropertiesInjected() {
assertthat(yamlFooProperties.getName()).isEqualTo("foo");
assertthat(yamlFooProperties.getAliases()).containsExactly("abc","xyz");
}
}
在调试工厂时,我看到YAML文件被正确解析并添加到spring boot的propertySourceNames
结构中。但是,当以自动装配方式从测试访问它时,所有字段都为空,因此测试失败。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)