一、概述

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. 整除分块套杜教筛为什么是 O(n^2/3) 的

    假设我们要筛一个东西叫做 \(f\) . 记 \[D(n)=\left\{n,\left\lfloor\dfrac n2\right\rfloor,\left\lfloor\dfrac n3\righ ...

  2. 使用.NET简单实现一个Redis的高性能克隆版(六)

    译者注 该原文是Ayende Rahien大佬业余自己在使用C# 和 .NET构建一个简单.高性能兼容Redis协议的数据库的经历. 首先这个"Redis"是非常简单的实现,但是他 ...

  3. 【游记】CSP 2021 J2

    这次是第一次参加CSP的复赛,所以考的就很LJ. \(DAY-\infty\) 到 \(DAY-14\) 知道了自己苟过了初赛,像个SB一样. (我初赛66分,旁边那位63.5,cao着线过去的) \ ...

  4. 快速掌握 Base 64 | 学 Java 密码系列

    Java 密码系列 - Java 和 JS Base 64 Base 64 不属于密码技术,仅是编码方式.但由于在 Java.JavaScript.区块链等出现的频率较高,故在本系列文章中首先分享 B ...

  5. C#/VB.NET 创建PDF/UA文件

    1.什么是PDF/UA文件 PDF/UA,即Universally Accessible PDF,该格式的PDF文件是于2012年8月以ISO标准14289-1发布的.具有普遍可访问的PDF文档标准. ...

  6. [Golang] cgo 调用 .so 捕获异常问题

    最近需要在 go 中去调用 .so 库去完成一些事情,go 方面,利用 cgo 可以顺利的调用 .so 中的方法,但是有个问题是 go 没法捕获 .so 那边出现的异常.如果 .so 那边异常了,那么 ...

  7. ASP.NET Core 6框架揭秘实例演示[34]:缓存整个响应内容

    我们利用ASP.NET开发的大部分API都是为了对外提供资源,对于不易变化的资源内容,针对某个维度对其实施缓存可以很好地提供应用的性能.<内存缓存与分布式缓存的使用>介绍的两种缓存框架(本 ...

  8. 业务流程可视化-让你的流程图"Run"起来(7.运行状态持久化&轻量工作流支持)

    前言 感谢大家阅读本项目系列文章和对项目的支持.分享一下我对这个项目的新的改进. 之前项目做到了流程设计可视化和流程运行结果可视化. 本期发布的版本中实现了中间的运行过程的实时可视化,和流程状态持久化 ...

  9. EL&JSTL笔记------jsp

    今日内容 1. JSP: 1. 指令 2. 注释 3. 内置对象 2. MVC开发模式 3. EL表达式 4. JSTL标签 5. 三层架构 JSP: 1. 指令 * 作用:用于配置JSP页面,导入资 ...

  10. KingbaseES where 条件解析顺序

    概述 KingbaseES 对于where 条件的解析严格遵守"从左到右"的原则,因此,对于选择性比较强的条件,进行最先过滤是有利于性能的. 一.KingbaseES 1.条件顺序 ...