一、概述

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 上 获得。

原文地址:https://www.cnblogs.com/hunterzhang/p/16789495.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性