我可以在Spring Boot应用程序中使用xml属性文件而不是application.properties吗?

时间:2015-10-07 23:05:16

标签: xml properties spring-boot

在我们的 Spring Boot 应用程序中,我们使用 application.properties ,但是Ops团队要求使用基于XML的属性文件。格式很简单。如果 apllication.properties 如下所示:

com.mail.host=mail_host
db.connection.port=1521

相应的xml应为:

<XML>
    <com>
        <mail>
            <host>
                mail_host
            </host>
        </mail>
    </com>
    <db>
        <connection>
            <port>
                1521
            </port>
        </connection>
    </db>
</XML>

我们实现了这一点,但 Spring Boot 仍在寻找 application.properties 以获取其特定属性。这有点不方便。我们希望将所有属性放在一个位置,即 - XML文件。

覆盖 Spring Boot 的默认行为的最佳方法是什么,以使其在XML文件中查找属性? (当然,它需要一些自定义代码,因为 Spring Boot 了解简单的属性格式(如 key = value )和YAML格式,但没有XML。)

3 个答案:

答案 0 :(得分:4)

Spring Boot不仅从扩展名为.properties&amp;的文件中读取属性。 .yaml,但也来自.xml。而不是application.properties只是以下列格式在资源文件夹中提供application.xml: -

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
    <comment>Application properties in XML format</comment>
    <entry key="com.mail.host">mail_host</entry>
    <entry key="db.connection.port">1521</entry>
</properties>

在您的类文件中,您可以简单地设置值,就像我们对任何属性或yaml文件一样,即@Value("${com.mail.host}")将在它将注释的任何实例变量上设置相应的值。

答案 1 :(得分:0)

如果您绝对必须从自定义xml源加载属性,那么本文可能会有所帮助:

https://coderwall.com/p/mm5ihw/how-to-add-custom-property-source-to-spring-s-environment

它提供了一个在Spring 3中通过Java配置从一些网络源加载自定义属性的示例,但是将代码调整为从Ops团队的XML格式读取到SpringBoot应用程序中应该不会太困难。

答案 2 :(得分:0)

问题不在于编写我们自己的XML解析器。我们已经拥有了。问题是如何使Spring Boot从XML文件中读取特定属性,因为当应用程序启动时,SB会尝试从application.properties自动读取它们,而我们无法使用我们的自定义XML解析器。

看起来比我想象的容易。当应用程序启动时,我们的代码调用静态初始化方法,该方法使用我们的自定义解析器从XML文件中读取道具。它通过调用:

将Spring Boot特定属性设置为系统属性
System.setProperty(...)

稍后,Spring Boot能够获取这些prop值,就像它们在application.properties中给出一样。