我可以在 Spring 引导应用程序中使用 xml 属性文件而不是 application.properties 吗?
Can I use xml properties file instead of application.properties in a Spring Boot application?
在我们的 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.)
Spring Boot 不仅从扩展名为 .properties 和 .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>
在您的 class 文件中,您可以像我们对任何属性或 yaml 文件所做的那样简单地设置值,即 @Value("${com.mail.host}")
将在它将注释的任何实例变量上设置相应的值。
如果您绝对必须从自定义 xml 源加载属性,那么这篇文章可能会有所帮助:
https://coderwall.com/p/mm5ihw/how-to-add-custom-property-source-to-spring-s-environment
它提供了一个通过 Java 配置加载自定义属性的示例 Spring 3 来自一些网络源,但调整代码以从您的 Ops 团队读取应该不会太难XML 格式化到您的 Spring 启动应用。
问题是没有编写我们自己的 XML 解析器。我们已经有了。问题是如何让 Spring Boot 从 XML 文件中读取特定的属性,因为 SB 试图在应用程序启动时自动从 application.properties 中读取它们而我们无法做到使用我们的自定义 XML 解析器。
似乎比我想象的要容易。当应用程序启动时,我们的代码调用一个静态初始化方法,该方法使用我们的自定义解析器从 XML 文件中读取道具。它通过调用将 Spring 引导特定属性设置为系统属性:
System.setProperty(...)
稍后,Spring Boot 能够获取这些属性值,就像在 application.properties.
中给出的一样
在我们的 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.)
Spring Boot 不仅从扩展名为 .properties 和 .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>
在您的 class 文件中,您可以像我们对任何属性或 yaml 文件所做的那样简单地设置值,即 @Value("${com.mail.host}")
将在它将注释的任何实例变量上设置相应的值。
如果您绝对必须从自定义 xml 源加载属性,那么这篇文章可能会有所帮助:
https://coderwall.com/p/mm5ihw/how-to-add-custom-property-source-to-spring-s-environment
它提供了一个通过 Java 配置加载自定义属性的示例 Spring 3 来自一些网络源,但调整代码以从您的 Ops 团队读取应该不会太难XML 格式化到您的 Spring 启动应用。
问题是没有编写我们自己的 XML 解析器。我们已经有了。问题是如何让 Spring Boot 从 XML 文件中读取特定的属性,因为 SB 试图在应用程序启动时自动从 application.properties 中读取它们而我们无法做到使用我们的自定义 XML 解析器。
似乎比我想象的要容易。当应用程序启动时,我们的代码调用一个静态初始化方法,该方法使用我们的自定义解析器从 XML 文件中读取道具。它通过调用将 Spring 引导特定属性设置为系统属性:
System.setProperty(...)
稍后,Spring Boot 能够获取这些属性值,就像在 application.properties.
中给出的一样