外部配置加载顺序|学习笔记

简介: 快速学习外部配置加载顺序

开发者学堂课程【SpringBoot快速掌握 - 核心技术外部配置加载顺序】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/612/detail/9230


外部配置加载顺序

目录

一、外部加载配置顺序

二、外部配置方式

三、命令行参数举例

四、由jar包外向jar包内进行寻找

五、总结

 

一、外部加载配置顺序

Spring Boot 的另一个特点:外部配置加载顺序。也就是 Spring Boot 要写一些配置不止可以写在应用的配置文件里 application.properties 放在内路径下,还可以从下面11个位置里加载配置,要把配置写在这些位置也是可以的,这里有列举11个,核心在红颜色标识。详细能写在哪里在官方文档里列举。

 

二、外部配置方式

SpringBoot 也可以从以下位置加载配置﹔优先级从高到低﹔高优先级的配置覆盖低优先级的配置,所有的配置会形成互补配置

1. 命令行参数

java-jar spring-boot-02-config-02-0.0.1-SNAPSHOT.jar --server.port=8087

2. 来自 java:comp/env 的 JNDI 属性

3. Java 系统属性(System.getProperties())

4. 操作系统环境变量

5. RandomValuePropertySource 配置的 random.*属性值

由 jar 包外向 jar 包内进行寻找

优先加载带 profile

6. jar 包外部的 application-{profile}.properties 或 application.yml带spring.profile)配置文件

7. jar 包内部的 application-{profile}.properties 或 application.yml(带spring.profile)配置文件

再来加载不带 profile

8. jar 包外部的 application.properties 或 application.yml(不带spring.profile)配置文件

9. jar 包内部的 application.properties application.yml(不带 spring.profile)配置文件

10. @Configuration 注解类上的 @PropertySource

11. 通过 SpringApplication.setDefaultProperties 指定的默认属性


三、命令行参数举例

将 application.properties 应用打包,打包完成以后访问项目,关键打包时候只能识别 main、java 以及 resources 目录下的东西再打包,剩下的 src 和 config 是不能打包的。

接下来打开控制台访问 target 目录,输入java-jar spring-boot-02-config-02-0.0.1-SNAPSHOT.jar包,如果默认执行就会找到 config 文件夹下的application.properties,找到8082端口执行,所以以 Tomcat started on port(s): 8082 (http) 8082端口启动,并且和 server.context-path=/boot02 形成互补配置。输入locallhost:8082/boot02/hello访问boot02,可以看到没有问题。

但是如果想改变服务器端口号,那么得写一个配置文件才能改。在执行命令的时候,可以用命令行参数修改Spring Boot的默认配置。在 target 目录下输入

java -jar spring-boot-02-config-02-0.0.1-SNAPSHOT.jar --server.port=8087

回车启动,可以看到是以 Tomcat started on port(s): 8087 (http)即以8087为端口启动的。

也就是说命令行加载的是优先级别,当然里面的配置文件还配了访问名,它们同时生效8087

也就是说可以用命令行来修改 Spring Boot 里面的所有默认配置。


四、由 jar 包外向 jar 包内进行寻找

以应用打包为例,将打包好的应用复制到新建的 hello文件夹里,如果现在启动应用,因为已经打包好,这里用360浏览器打开,它只能将内路径下的文件打包,最终高优先级是server.port=8082端口,但是整合的访问路径一起生效,所以可以看到配置文件是server.port=8082,包括默认的也配置了 boot02 访问路径。输入 cmd 打开控制台,用 java-jar spring-boot-02-config-02-0.0.1-SNAPSHOT.jar命令启动,启动的是8082端口并且boot02也生效。

将 application.properties 按照要求放在 jar 包外部,这里改 成 server.port=8088端口,server.context-path=boot,放在外部启动。输入cmd 进入控制台,输入java-jar spring-boot-02-config-02-0.0.1-SNAPSHOT.jar,不输入任何参数启动,启动就会加载外部配置。可以看到端口是8088,那么访问路径也一定按照外部是 boot。输入locallhost:8088/boot/hello也是可以的。

这就是优先级加载的问题,可以给各个位置比如第一个命令行参数,这是非常重要的,第二个可以从 jar 外部来加载,当然这里还分带 profile 和不带 profile。

 

五、总结

所有支持的配置加载来源详细就看官方文档:[参考官方文档](https:/ldocs.spring.io/spring-boot/docs/1.5.9.RELEASE/reference/htmlsingle/#boot-features-external-config)

以上就是所有配置来源,但是要记住:Spring Boot 可以从这些位置来加载配置,优先级从高到低;高优先级覆盖低优先级,所有合起来形成互补配置。

相关文章
|
Java
09 SpringBoot外部配置加载顺序
09 SpringBoot外部配置加载顺序
69 0
|
Java Maven Spring
maven项目,动态读取外部配置文件
maven项目,动态读取外部配置文件
321 0
|
6月前
|
Java
SpringBoot之内部配置加载顺序和外部配置加载顺序
SpringBoot之内部配置加载顺序和外部配置加载顺序
|
6月前
|
安全 前端开发 测试技术
安全开发-PHP应用&模版引用&Smarty渲染&MVC模型&数据联动&RCE安全&TP框架&路由访问&对象操作&内置过滤绕过&核心漏洞
安全开发-PHP应用&模版引用&Smarty渲染&MVC模型&数据联动&RCE安全&TP框架&路由访问&对象操作&内置过滤绕过&核心漏洞
|
7月前
SpringMVC跳转外部项目方式
SpringMVC跳转外部项目方式
55 0
|
7月前
|
Java
SpringBoot内部配置加载顺序
SpringBoot内部配置加载顺序
66 0
|
7月前
|
XML JSON Java
SpringBoot 配置文件编写及使用方式 (拒绝硬编码)
SpringBoot 配置文件编写及使用方式 (拒绝硬编码)
60 0
|
存储 前端开发 Nacos
从源码角度分析 Nacos 配置文件加载以及加载优先级
从源码角度分析 Nacos 配置文件加载以及加载优先级
799 0
springboot自定义外部扩展文件
在springboot启动的时候调用run方法,可以看到run方法里面的内容,其中有一个getRunListeners方法
|
Java 开发工具
SpringBoot2.x基础篇:配置文件的加载顺序以及优先级覆盖
`SpringBoot`约定了配置文件,默认为`application.properties`,通过该文件可以修改很多默认的配置,当然我们还可以在该配置文件内添加自定义的配置,该文件通过`key=value`的形式进行配置。