使用 YamlMapFactoryBean

问题描述

我正在尝试通过 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 (将#修改为@)