用于@ConfigurationProperties的自定义基于XML的属性源加载器

时间:2016-03-28 07:11:15

标签: xml configuration spring-boot

我有兴趣在我的应用程序中创建一个或多个自定义属性源加载器并在@ConfigurationProperties中使用这些属性源。

例如,我想开发一个属性源加载器,它能够加载XML文件并将其转换为一组属性,这些属性可以注入我的@Configuration带注释的类中。

@Configuration
@ConfigurationProperties(locations="classpath:config.xml")
public class MyConfig
{
    ...
}

是否公开提供任何此类基于XML的属性源加载器?如果没有,那么一旦实施,我将如何将其提供给我的应用程序?

谢谢。

1 个答案:

答案 0 :(得分:3)

您可以查看YamlPropertySourceLoader的实现方式。一旦实现了方法

org.springframework.boot.env.YamlPropertySourceLoader#getFileExtensions
添加类似

之后,将调用

@ConfigurationProperties(locations="classpath:config.xml")

但是看着YamlPropertySourceLoader的实现,看起来你会有很多工作要做,还有削减等等。

你应该检查yaml是否足够你,因为它使你有可能制作结构化的属性:

例如,以下YAML文档:

environments:
    dev:
        url: http://dev.bar.com
        name: Developer Setup
    prod:
        url: http://foo.bar.com
        name: My Cool App

将转化为这些属性:

environments.dev.url=http://dev.bar.com
environments.dev.name=Developer Setup
environments.prod.url=http://foo.bar.com
environments.prod.name=My Cool App

YAML列表表示为带有[index]解除引用的属性键,例如此YAML:

my:
   servers:
       - dev.bar.com
       - foo.bar.com

将转化为这些属性:

my.servers[0]=dev.bar.com
my.servers[1]=foo.bar.com

即使您已准备好XML文档,并且这是您希望在配置中加载它们的原因,将XML转换为YAML(https://github.com/FasterXML/jackson-dataformat-xml)并使用现有的YamlPropertySourceLoader比编写自己的PropertySourceLoader要简单得多。