.
针对 nacos 在 springboot 中的调用,获取配置信息,做如下测试,并得出结论 :
nacos 测试结果:
1.nacos 管理的配置文件中,配置了一个key,再到项目中bootstrap.yml中配置相同的key,不起作用!
nacos 配置:
info:
redis:
host: localhost
port: 6379
本地bootstrap.yml配置:
info:
redis:
host: 192.168.100.100
port: 6379
输出:{“host”:”localhost”,”port”:6379}
2.nacos 管理的配置文件中,配置了一个以某个key开始的信息,再到项目中bootstrap.yml中配置相同的key开始的信息,以nacos管理的配置信息为主,bootstrap.yml中为辅助!
nacos 配置:
info:
redis:
host: localhost
port: 6379
本地bootstrap.yml配置:
info:
redis:
host: 192.168.100.100
port: 6379
index: 1
输出:{“host”:”localhost”,”index”:1,”port”:6379}
3.nacos 管理的配置文件中,配置了一个以某个key开始的信息,再到项目中 application.yml中配置相同的key开始的信息,以nacos管理的配置信息为主,application.yml中为辅助!
nacos 配置:
info:
redis:
host: localhost
port: 6379
本地 application.yml配置:
info:
redis:
host: 192.168.100.100
port: 6379
index: 1
输出:{“host”:”localhost”,”index”:1,”port”:6379}
4.nacos 管理的配置文件中,配置了一个以某个key开始的信息,再到项目中 application-xxx.yml中配置相同的key开始的信息,以nacos管理的配置信息为主,application-xxx.yml中为辅助!
nacos 配置:
info:
redis:
host: localhost
port: 6379
本地 application.yml配置:
info:
redis:
host: 192.168.100.100
port: 6379
index: 1
输出:{“host”:”localhost”,”index”:1,”port”:6379}
5.springboot 工程中,相同名称的文件名: application.properties 和 application.yml ,会读取application.yml中的内容.
结论:文件配置,优先级由高到底,高优先级的配置会覆盖低优先级的配置.
1.一切以 nacos 配置中心的配置信息为主,本地bootstrap.yml 或 application.yml中有相同信息,不会被覆盖, 获取时候,可以将公共的信息抽取出来放入到 nacos 配置中去,私有的信息放置到本地的yml中.
2.Springboot 中,加载完bootstrap.yml中的信息,还会加载本地的,其他yml文件,加载顺序是:bootstrap.yml>application.yml>application-xxx.yml,没有application.yml,会默认加载application-dev.yml.
如果某key存在application.yml,也存在application.properties文件,那么会读取application.yml中相同的key的配置作为springboot的获取的值。
3.bootstrap.yml 由父Spring ApplicationContext加载,它的级别是最高的.bootstrap.yml 是放入的是系统级别的配置,配置是最高的;application.yml 可以用来定义应用级别的,级别要低些.
4.在不指定要被加载文件时,默认的加载顺序:由里向外加载,所以最外层的最后被加载,会覆盖里层的属性(参考官网介绍)
SpringApplication will load properties from application.properties files in the following locations and add them to the Spring Environment:
5.Springboot 默认的web容器主要有:Tomcat > Jetty > Undertow , 默认的web容器是:Tomcat 这个在spring-boot-starter-web中引入的配置可以证明.
@Import({ ServletWebServerFactoryAutoConfiguration.BeanPostProcessorsRegistrar.class,
ServletWebServerFactoryConfiguration.EmbeddedTomcat.class,
ServletWebServerFactoryConfiguration.EmbeddedJetty.class,
ServletWebServerFactoryConfiguration.EmbeddedUndertow.class })
public class ServletWebServerFactoryAutoConfiguration {} 从这个顺序上来说,也是: Tomcat > Jetty > Undertow ,一般情况下,在SpringBoot依赖中默认就已经引入tomcat的依赖,
因此这里对于tomcat来说一般情况下会恒成立,那么Tomcat就会一直作为恒成立条件被SpringBoot首选为默认服务器。可以手动通过@Bean 标签来配置SpringBoot的web容器.
6.如何剔除Tomcat作为springboot的默认web容器,使用 jetty 作为 SpringBoot 的web容器,那就是如下所示:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!– 剔除Tomcat –>
<exclusions>
<exclusion>
<artifactId>spring-boot-starter-tomcat</artifactId>
<groupId>org.springframework.boot</groupId>
</exclusion>
</exclusions>
</dependency>
<!– 加入jetty –>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
web容器的自动配置,实际上是SpringBoot通过创建原生Tomcat对象,对这个对象进行端口,协议,组件等初始化,并且将Web应用信息Context对象封装到这个tomcat对象中,
然后Web应用信息配置生命周期监听生效后启动tomcat,最后将这个过程封装到一个WebServer对象中供SpringBoot启动时调用。
大致信息如此,其他的后续再补充。