乐趣区

关于后端:Spring-Boot-配置-jar-包外面的-Spring-Properties-文件

一、概述

Properties 文件是咱们能够用来存储我的项目特定信息的罕用办法。现实状况下,咱们应该将其保留在 jar 包之外,以便可能依据须要对配置进行更改。

在这个教程中,咱们将钻研在 Spring Boot 应用程序 中从 jar 内部地位加载 Properties 文件的各种 办法。

二、应用默认地位

依照常规,Spring Boot 按以下优先程序在四个预约地位查找内部化配置文件 — application.propertiesapplication.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_NAMESPRING_CONFIG_LOCATION

export SPRING_CONFIG_NAME=application,jdbc
export SPRING_CONFIG_LOCATION=file:///Users/home/config
java -jar app.jar

请留神,仍将加载默认文件。然而 环境特定的属性文件优先 以防产生属性抵触。

  1. 应用应用程序属性

如咱们所见,咱们必须在应用程序启动之前定义 spring.config.namespring.config.location 属性,因而在 application.properties 文件(或 YAML 对应文件)中应用它们将没有影响。

Spring Boot 在 2.4.0 版本中批改了属性的解决形式。

与此更改一起,团队引入了一个新属性,容许间接从应用程序属性导入其余配置文件:

spring.config.import=file:./additional.properties,optional:file:/Users/home/config/jdbc.properties
  1. 以编程形式

如果咱们想要编程拜访,咱们能够注册一个 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 上 取得。

退出移动版