一、概述
Properties 文件是咱们能够用来存储我的项目特定信息的罕用办法。现实状况下,咱们应该将其保留在 jar 包之外,以便可能依据须要对配置进行更改。
在这个教程中,咱们将钻研在 Spring Boot 应用程序 中从 jar 内部地位加载 Properties 文件的各种 办法。
二、应用默认地位
依照常规,Spring Boot 按以下优先程序在四个预约地位查找内部化配置文件 — application.properties 或 application.yml:{#crayon-5c73a186c8530009937282}
- 当前目录的 /config 子目录
- 当前目录
- 一个类门路 /config 包
- 类门路根
因而,在 application.properties 中定义并搁置在当前目录的 /config 子目录中的属性将被加载。 这也会在发生冲突时笼罩其余地位的属性。
三、应用命令行
如果上述约定对咱们不起作用,咱们能够 间接在命令行中配置地位:
java -jar app.jar --spring.config.location=file:///Users/home/config/jdbc.properties
咱们还能够传递应用程序搜寻文件的文件夹地位:
java -jar app.jar --spring.config.name=application,jdbc --spring.config.location=file:///Users/home/config
最初,另一种办法是通过 Maven 插件 运行 Spring Boot 应用程序。
在那里,咱们能够应用 -D 参数:
mvn spring-boot:run -Dspring.config.location="file:///Users/home/jdbc.properties"
四、应用环境变量
当初假如咱们不能更改启动命令。
很棒的是 Spring Boot 还会读取环境变量 SPRING_CONFIG_NAME 和 SPRING_CONFIG_LOCATION:
export SPRING_CONFIG_NAME=application,jdbc
export SPRING_CONFIG_LOCATION=file:///Users/home/config
java -jar app.jar
请留神,仍将加载默认文件。然而 环境特定的属性文件优先 以防产生属性抵触。
-
应用应用程序属性
如咱们所见,咱们必须在应用程序启动之前定义 spring.config.name 和 spring.config.location 属性,因而在 application.properties 文件(或 YAML 对应文件)中应用它们将没有影响。
Spring Boot 在 2.4.0 版本中批改了属性的解决形式。
与此更改一起,团队引入了一个新属性,容许间接从应用程序属性导入其余配置文件:
spring.config.import=file:./additional.properties,optional:file:/Users/home/config/jdbc.properties
-
以编程形式
如果咱们想要编程拜访,咱们能够注册一个 PropertySourcesPlaceholderConfigurer bean:
public PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
PropertySourcesPlaceholderConfigurer properties =
new PropertySourcesPlaceholderConfigurer();
properties.setLocation(new FileSystemResource("/Users/home/conf.properties"));
properties.setIgnoreResourceNotFound(false);
return properties;
}
在这里,咱们应用 PropertySourcesPlaceholderConfigurer 从自定义地位加载属性。
七、从 Fat Jar 中排除文件
Maven Boot 插件会主动将 src/main/resources 目录下的所有文件蕴含到 jar 包中。
如果咱们不想让某个文件成为 jar 的一部分,咱们能够应用一个简略的配置来排除它:
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<excludes>
<exclude>**/conf.properties</exclude>
</excludes>
</resource>
</resources>
</build>
在这个例子中,咱们过滤掉了 conf.properties 文件,使其不蕴含在生成的 jar 中。
八、小结
本文展现了 Spring Boot 框架自身如何为咱们解决 externalized configuration。
通常,咱们只须要将属性值放在正确的文件和地位。但咱们也能够应用 Spring 的 Java API 进行更多管制。
与平常一样,示例的残缺源代码可在 GitHub 上 取得。