SpringBoot_配置-外部配置加载顺序

接下来我们再来看SpringBoot的一个特点,外部配置的加载顺序,也就是说,SpringBoot我们要写一些配置,

配置可以写在我们的配置文件,application.properties,放到类路径下,我们不仅可以在这里配置,还可以从这些

位置加载配置,我们把配置写在这些位置,也是可以的,详细能够写在哪些位置呢,我这里有列举11个,但是官方文档

Externalized Configuration,有一个外部配置,官方文档列举了17个

https://docs.spring.io/spring-boot/docs/1.5.22.RELEASE/reference/html/boot-features-external-config.html

Devtools global settings properties on your home directory (~/.spring-boot-devtools.properties when devtools is active).
@TestPropertySource annotations on your tests.
@SpringBootTest#properties annotation attribute on your tests.
Command line arguments.
Properties from SPRING_APPLICATION_JSON (inline JSON embedded in an environment variable or system property)
ServletConfig init parameters.
ServletContext init parameters.
JNDI attributes from java:comp/env.
Java System properties (System.getProperties()).
OS environment variables.
A RandomValuePropertySource that only has properties in random.*.
Profile-specific application properties outside of your packaged jar (application-{profile}.properties and YAML variants)
Profile-specific application properties packaged inside your jar (application-{profile}.properties and YAML variants)
Application properties outside of your packaged jar (application.properties and YAML variants).
Application properties packaged inside your jar (application.properties and YAML variants).
@PropertySource annotations on your @Configuration classes.
Default properties (specified using SpringApplication.setDefaultProperties).

这些其实都太多了,其实你只要关注我红颜色这几个,我提取出的这个个可以看一下,SPRING BOOT,也可以从以下位置加载配置,

是按照优先级从高到低,也就是说,高优先级的配置覆盖低优先级的配置,所有的配置会形成互补配置,记住这句话就行了,那我们主要来看

这几个位置,比如第一个我们可以放到命令行参数上,这个是什么意思呢,来给大家举个例子

我们这个应用在打包的时候,我们来把这个应用来打一个包,如果我们在打包的时候呢,我们要打包完成以后,

我们来访问这个项目,关键打包的时候呢,只会识别main,java,resources下的一些东西,我用java -jar的命令,

我们来执行这个jar包,如果我们默认来执行,他就会找到config下的8082端口,从而以8082端口来启动,并且跟他

形成互补配置,访问boot02,没什么问题,但是某一天我想改一下服务端的端口号,那我们得写一个配置文件再来改,

这也太麻烦了,我在执行命令的时候,我们可以使用命令的方式,我写一个服务器的端口号,我来给他指定8087

java -jar .... --server.port=8087

我来指定他

看看他是什么端口启动呢,我们发现他就是8087端口了,命令行的优先级别,我们里边的配置文件,默认我们

还配了访问名,我们可以使用命令行修改spring boot的默认配置,我们在命令行的时候加上他,我们以前命令行

配置也演示了很多,特别是spring.config.location,指定配置文件位置的,我们可以加载来自JNDI的,或者JAVA虚拟机的

系统属性,包括也可以是环境变量,主要看下面这几个,jar包外的带profile的,jar包内的加profile的,这四个我们就

总结成两个,首先是优先加载带profile的,如果我们指定了这个环境,那他就优先加载带profile的,不管是jar包外带的还是

jar内带的,再来加载,不带profile的,但是不管怎么加载,都是由jar外向jar包内进行寻找,然后高优先级的配置,覆盖低优先级

的配置,这个也是非常有用的

命令行的多个参数怎么区分,我们可以直接用空格,来指定第二个参数,比如server.context-path,比如我们就叫abc,

这种方式是可以的

如果我们要启动应用,要改配置,我们可以在命令行里边把我们所有的配置,都改掉,来启动,他一定是从8087端口启动,

包括项目启动路径也会叫abc,现在访问boot02就不行了,我们访问abc,现在是可以的,我们所有的参数都可以按照优先级,

都来指定到命令行,多个配置用空格分开,--配置项=值,这是我们第一种命令行参数,但如果太多了我们来这么指定,然后我

就可以这么来做,我们第一个命令行参数,这是非常重要的,第二个我们可以从jar包外部来加载,profile我们也说过了,

可以简单演示一下,可以用@Configuration注解类上@PropertyResource专门引用的配置文件,而我们实际的所有加载来源,

详细就来看我们的官方文档,有这么多,这个东西太多了,我们实际用不到这么多,参考官方文档

https://docs.spring.io/spring-boot/docs/1.5.22.RELEASE/reference/html/boot-features-
external-config.html

这是我们所有的配置加载来源,但是记住一句话,Springboot可以从这些位置来加载配置,优先级从高到低,然后高优先覆盖

低优先,所有合起来形成互补配置,这就是我们的总结

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值