Spring Boot 配置 jar 包外面的 Properties 配置文件
一、概述
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 上 获得。
Spring Boot 配置 jar 包外面的 Properties 配置文件的更多相关文章
- Spring boot 打成jar包问题总结
Spring boot 打成jar包问题总结 1.Unable to find a single main class from the following candidates 1.1.问题描述 m ...
- spring boot将jar包转换成war包发布
spring boot将jar包转换成war包发布步骤 将<packaging>jar</packaging>修改为<packaging>war</packa ...
- Spring Boot由jar包转成war包
Spring Boot由jar包转成war包 spring boot 默认是以jar包形式启动web程序,在新建spring boot项目时候可以选择war包的启动方式. 建议在开发的时候建立以jar ...
- 在Docker容器中运行Spring Boot的jar包 jar外的配置文件无法生效
Spring Boot加载配置文件,默认会从几个固定位置搜索一下看看有没有配置文件 ——application.properties或者bootstrap.properties(如果你使用了sprin ...
- 如何读取jar包外的properties文件和log4j.properties
http://jrails.iteye.com/blog/1705464 ***************************************' 一般在项目中使用properties配置文件 ...
- spring加载jar包中多个配置文件(转)
转自:http://evan0625.iteye.com/blog/1598366 在使用spring加载jar包中的配置文件时,不支持通配符,需要一个一个引入,如下所示: Java代码 <co ...
- Spring Boot 以 jar 包方式运行在后台
spring-boot jar 包方式启动: 首先,为了防止和常用的 Tomcat 8080 端口冲突,将 Spring-boot 项目的端口号设置为 9090. 具体方法:在 application ...
- 【转】Spring boot 打成jar包问题总结
http://www.cnblogs.com/xingzc/p/5972488.html 1.Unable to find a single main class from the following ...
- spring boot打jar包(maven对jar和lib分离)
spring boot intellij Ide打包有两种方式: 1.maven:熟悉.方便配置灵活 2.Build artifacts:操作比较复杂,jar和lib包分离 重点讲maven如何支持j ...
随机推荐
- 整除分块套杜教筛为什么是 O(n^2/3) 的
假设我们要筛一个东西叫做 \(f\) . 记 \[D(n)=\left\{n,\left\lfloor\dfrac n2\right\rfloor,\left\lfloor\dfrac n3\righ ...
- 钡铼BL102分布式IO系统如何应用于锂电池行业
近年来,全球新能源汽车的蓬勃发展促进了锂电池行业的发展.随着锂电池标准化程度的提高,电池和模块规格的标准化是未来的发展趋势,也促进了自动化模块生产线的发展. 锂电池模块生产线通过涂胶-电池堆叠-组装- ...
- Java学习 (七)基础篇 变量
变量 变量顾名思义,就是可以变化的量 Java是一种强类型语言,每个变量都必须声明其类型 Java变量是程序中最基本的存储单位,其要素包括变量名.变量类型和作用域 type varName [=val ...
- 「Python实用秘技10」深度比较Python对象间差异
本文完整示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/PythonPracticalSkills 这是我的系列文章「Python实用秘技」的第10 ...
- Python-基础学习-第二轮
目录 数据类型 文件 自调用其他程序 os.system函数 os.startfile 函数 subprocess 模块 线程和进程 创建新线程 共享数据的访问控制 deamon线程 多线程 JSON ...
- 理解vue中v-for循环中得key原理及一些错误
作用:给节点做一个标识,相当于人类的身份证号,虚拟DOM中的标识 下列是key值的一些使用场景和带来的问题: js: const vm = new Vue({ el: ...
- 从贡献第一个 pr 开始,我的开源之路正式开启
点击上方蓝字关注我们 1 我是一名开源爱好者 我是李进勇,Github Id:JinyLeeChina,目前就职于政采云,专注于大数据平台及数仓领域,是开源项目爱好者. 2 我与小海豚的不解之缘 记得 ...
- MySQL8.0解决“MySQL 服务无法启动。 服务没有报告任何错误。”
TL;NRs 初始化服务时最好使用mysqld --initialized --console命令: MySQL8.0的配置变量与MySQL5.7不同,[mysqld]下面设置字符集的变量名为char ...
- mybatis 14: 多对一关联查询
业务背景 根据订单id查询订单的信息,以及该订单所属的客户的基本信息(不包括该客户自己的订单信息) 两张数据表 客户表 订单表 实体类 客户实体类:Customer private Integer i ...
- JavaSciprt 笔记目录
JavaScript 基础知识(一):对象以及原型 JavaScript 基础知识(二):闭包 JavaScript 异步编程(一):认识异步编程 JavaScript 异步编程(二):Promise