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

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

开发者学堂课程【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外部配置加载顺序
72 0
|
Java Maven Spring
maven项目,动态读取外部配置文件
maven项目,动态读取外部配置文件
328 0
|
7月前
|
Java
SpringBoot之内部配置加载顺序和外部配置加载顺序
SpringBoot之内部配置加载顺序和外部配置加载顺序
|
8月前
SpringMVC跳转外部项目方式
SpringMVC跳转外部项目方式
57 0
|
8月前
|
Java
SpringBoot内部配置加载顺序
SpringBoot内部配置加载顺序
69 0
|
存储 前端开发 Nacos
从源码角度分析 Nacos 配置文件加载以及加载优先级
从源码角度分析 Nacos 配置文件加载以及加载优先级
811 0
springboot自定义外部扩展文件
在springboot启动的时候调用run方法,可以看到run方法里面的内容,其中有一个getRunListeners方法
|
Java 开发工具
SpringBoot2.x基础篇:配置文件的加载顺序以及优先级覆盖
`SpringBoot`约定了配置文件,默认为`application.properties`,通过该文件可以修改很多默认的配置,当然我们还可以在该配置文件内添加自定义的配置,该文件通过`key=value`的形式进行配置。
|
消息中间件 网络协议 关系型数据库
Java应用程序读取外部配置文件
当我们在服务器上安装一些软件服务时,如 MySQL、Kafka、ES 等,在启动服务的时候,脚本会读取默认路径下的配置文件,如果配置文件没有放到默认的路径下,我们也可以通过参数的方式指定,通过这个配置文件,可以灵活方便的开始某些功能或调整某些参数,不用重新对源码进行修改、编译和发布了。 所以,我们工作当中有时希望可以把配置文件放在程序外,这样就可以做到配置与业务分离,在项目中使用的 properties,这里就说一下如何用 properties 配置文件,默认加载 classpath 下的文件,如果通过参数指定了文件路径就可以使用外部配置了。
|
Java 测试技术 数据库连接
springboot原理实战(6)--配置文件注入集合,动态注入,切换profile环境
springboot原理实战(6)--配置文件注入集合,动态注入,切换profile环境
372 0
springboot原理实战(6)--配置文件注入集合,动态注入,切换profile环境