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

用于@ConfigurationProperties的自定义基于XML的属性源加载程序,xml,configuration,spring-boot,Xml,Configuration,Spring Boot,我感兴趣的是创建一个或多个自定义属性源加载程序,并在我的应用程序中将这些属性源与@ConfigurationProperties一起使用 例如,我想开发一个属性源加载器,能够加载XML文件并将其转换为一组属性,这些属性可以注入到我的@Configuration注释类中 @Configuration @ConfigurationProperties(locations="classpath:config.xml") public class MyConfig { ... } 是否有任何此

我感兴趣的是创建一个或多个自定义属性源加载程序,并在我的应用程序中将这些属性源与
@ConfigurationProperties
一起使用

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

@Configuration
@ConfigurationProperties(locations="classpath:config.xml")
public class MyConfig
{
    ...
}
是否有任何此类基于XML的属性源加载器可公开使用?如果没有,那么一旦我实现了它,我将如何让它对我的应用程序可用


谢谢。

您可以检查YamlPropertySourceLoader是如何实现的。一旦你实现了这个方法

org.springframework.boot.env.YamlPropertySourceLoader#getFileExtensions
一旦添加类似的内容,将调用

@ConfigurationProperties(locations="classpath:config.xml")
但是在观看YamlPropertySourceLoader的实现时,看起来您将有很多工作要做,包括切割等

您应该检查yaml是否足以满足您的需要,因为它使您能够创建结构化属性:

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
my.servers[0]=dev.bar.com
my.servers[1]=foo.bar.com
例如,以下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
my.servers[0]=dev.bar.com
my.servers[1]=foo.bar.com
YAML列表表示为带有[index]解引用器的属性键,例如此YAML:

my:
   servers:
       - dev.bar.com
       - foo.bar.com
将转换为以下属性:

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
my.servers[0]=dev.bar.com
my.servers[1]=foo.bar.com

即使您已经准备好XML文档,这也是您希望在配置中加载它们的原因,但将XML转换为YAML()并使用现有的YamlPropertySourceLoader要比编写自己的PropertySourceLoader简单得多。

理论上,这应该是现成的,作为一个属性文件,可以用xml和普通属性格式表示。如果需要某种自定义格式,则必须编写自己的
属性资源加载程序
ApplicationContextInitializer
来预加载文件。