springboot 外部配置文件的引入
一般情况下 , springboot默认会在resource目录下生成一个配置文件(Application.properties或application.yaml),但其实springboot允许配置多个配置文件(application.properties或application.yaml) , 但是这并不意味着这些配置文件一定会替换默认生成的配置文件 , 它们是互补的存在 。如果在某些场景下需要把配置文件单独拿出来并且启动的时候加载进去 , 那么外部的配置文件将是一个很好的选择 。
配置文件加载顺序需要注意的是配置文件加载顺序加载顺序在springboot 2.4.0前后是不一样的 。
- springboot 2.4.0及其之前版本的配置文件加载顺序
file:./config/file:./config/*/file:./classpath:config/classpath:复制代码
- springboot 2.4.0之后版本的配置文件加载顺序
file:./config/*/file:./config/file:./classpath:config/classpath:复制代码
区别在于springboot 2.4.0之后的版本将file:./config/*/的在顺序调整为第一加载顺序 。file是指当前jar包所在路径 。
classpath是指springboot resource文件夹下路径 。
验证前期准备
- 新建一个springboot项目
启动类如下:
@SpringBootApplicationpublic class MqApplication {public static void main(String[] args) {ConfigurableApplicationContext applicationContext = SpringApplication.run(MqApplication.class, args);ConfigurableEnvironment environment = applicationContext.getEnvironment();String property = environment.getProperty("spring.application.name");System.out.println("current spring.application.name="+property);}}复制代码
配置文件:spring.application.name=classpathserver.port=8080复制代码
为了验证 springboot 2.4.0之前和之后的版本加载顺序的不一样 , 会使用两个版本对比 。对比版本:springboot 2.4.3 和 springboot 2.3.5.RELEASE下面是不同路径下配置不同端口和应用名以便验证 。
路径
端口号
application.name
file:./config/*/
8084
file:./config/*/
file:./config/
8083
file:./config/
file:./
8082
file:./
classpath:config/
8081
classpath:config/
classpath:
8080
classpath:
验证配置文件加载顺序根据上述表格 , 将配置文件分别复制到不同的路径下创建配置文件并按表格修改spring.application.name和server.port属性值 。
启动项目 , 下面是两个版本的启动信息:
文章插图
文章插图
从两张图中可以得出结论:
- springboot 2.4.0前后配置文件加载顺序不一样
- 高优先级的会覆盖掉低优先级相同的属性
- 修改配置文件:
- classpath:配置文件
删除spring.application.name属性 , 增加server.error.path属性
server.port=8080server.error.path=/test复制代码
- file:./配置文件
新增server.servlet.context-path属性
spring.application.name=file:.server.port=8082server.servlet.context-path=file_context复制代码
- file:./config/*/配置文件
保持不变
server.port=8084spring.application.name=file:./config/*/复制代码
- 修改启动类main方法
在控制台打印server.error.path
public static void main(String[] args) {ConfigurableApplicationContext applicationContext = SpringApplication.run(MqApplication.class, args);ConfigurableEnvironment environment = applicationContext.getEnvironment();String property = environment.getProperty("spring.application.name");System.out.println("current spring.application.name="+property);String errorPath = environment.getProperty("server.error.path");System.out.println("errorPath="+errorPath);}复制代码
- 启动项目
推荐阅读
- 记一次SpringBoot启动异常,jar问题的排查分析
- SpringBoot数据库管理 - 用flyway对数据库管理和迁移
- telnet命令解决方法 telnet不是内部或外部命令
- SpringBoot集成MyBatis的相关要点
- SpringBoot 整合 Elasticsearch 实现海量级数据搜索
- SpringBoot接口 - 如何生成接口文档之Swagger技术栈?
- SpringBoot 各种 Web 容器服开启 AccessLog 日志
- 初识SpringBoot Starter
- SpringBoot整合JWT实现登录认证
- 喉咙外部按压痛是怎么回事