一、概述

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

Spring Boot 配置 jar 包外面的 Properties 配置文件的更多相关文章

  1. Spring boot 打成jar包问题总结

    Spring boot 打成jar包问题总结 1.Unable to find a single main class from the following candidates 1.1.问题描述 m ...

  2. spring boot将jar包转换成war包发布

    spring boot将jar包转换成war包发布步骤 将<packaging>jar</packaging>修改为<packaging>war</packa ...

  3. Spring Boot由jar包转成war包

    Spring Boot由jar包转成war包 spring boot 默认是以jar包形式启动web程序,在新建spring boot项目时候可以选择war包的启动方式. 建议在开发的时候建立以jar ...

  4. 在Docker容器中运行Spring Boot的jar包 jar外的配置文件无法生效

    Spring Boot加载配置文件,默认会从几个固定位置搜索一下看看有没有配置文件 ——application.properties或者bootstrap.properties(如果你使用了sprin ...

  5. 如何读取jar包外的properties文件和log4j.properties

    http://jrails.iteye.com/blog/1705464 ***************************************' 一般在项目中使用properties配置文件 ...

  6. spring加载jar包中多个配置文件(转)

    转自:http://evan0625.iteye.com/blog/1598366 在使用spring加载jar包中的配置文件时,不支持通配符,需要一个一个引入,如下所示: Java代码 <co ...

  7. Spring Boot 以 jar 包方式运行在后台

    spring-boot jar 包方式启动: 首先,为了防止和常用的 Tomcat 8080 端口冲突,将 Spring-boot 项目的端口号设置为 9090. 具体方法:在 application ...

  8. 【转】Spring boot 打成jar包问题总结

    http://www.cnblogs.com/xingzc/p/5972488.html 1.Unable to find a single main class from the following ...

  9. spring boot打jar包(maven对jar和lib分离)

    spring boot intellij Ide打包有两种方式: 1.maven:熟悉.方便配置灵活 2.Build artifacts:操作比较复杂,jar和lib包分离 重点讲maven如何支持j ...

随机推荐

  1. 20220724-Java的继承

    目录 含义 代码示例 使用方法和注意事项 个人理解 含义 继承Extends 面向对象最显著的一个特性,继承是从已有的类中派生出新的类,新的类能吸收已有类的性和方法,并能扩展新的能力. 代码示例 cl ...

  2. if条件控制语句和switch语句

    if条件控制语句(判断范围,在一定区间内容进行判断) if 如果(第一个条件) else if 如果(第二个条件 可以无限加) else 否则(只能有一个 上面都不满足的情况下进入) if和else ...

  3. 高考集训讲课(To 高一)

    高考集训讲课(To 高一) 主要是怕下午讲着讲着把自己讲懵了,有一定的迷糊概率 经过机房的讨论,一致认为插头\(DP\)实用性不大,所以这次不讲了,先把重要的讲一讲. 顺便吐槽一下,凭什么另外几个人都 ...

  4. JS的简介

    JS式JavaScript的简称,它是一门弱语言,它可以实现让网页动起来 JS的构成 核心(ECMAScript) 文档对象模型(DOM)-- Document Object  Module 浏览器对 ...

  5. 痞子衡嵌入式:MCUXpresso IDE下设置代码编译优化等级的几种方法

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是MCUXpresso IDE下设置代码编译优化等级的几种方法. 最近公司芯片设计团队正在开发一款全新的基于 Cortex-M33 内核的 ...

  6. Springboot重定向,没有位置没有加“/user”,但是url在请求位置的前面“/user”就出现了

    是因为":"后面没有加"/" 原先的 return "redirect:main.html"; 正确的 return "redir ...

  7. JavaScript设计模式及代码实现——单例模式

    单例模式 1 定义 保证一个类仅有一个实例,并提供一个访问它的全局访问点. 2 应用时机 当一个类的实例被频繁使用,如果重复创建这个实例,会无端消耗资源.比如 dialog 弹窗会被全局重复使用 业务 ...

  8. uniapp小程序新版授权登录

    1.授权按钮: <view> <button class='login-btn' type='primary' @click="bindGetUserInfo"& ...

  9. KingbaseFlySync delete语句WHERE条件缺失的解析出错问题处理思路

    KingbaseFlySync delete语句WHERE条件缺失的解析出错问题处理思路 关键字: KingbaseFlySync.Linux.x86_64.mips64el.aarch64.Java ...

  10. 【设计模式】Java设计模式 - 组合模式

    Java设计模式 - 组合模式 不断学习才是王道 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 原创作品,更多关注我CSDN: 一个有梦有戏的人 准备将博客园.CSDN一起记录分享自己 ...