SpringBoot,Nacos 配置加载事宜

好记忆不如烂笔头,能记下点东西,就记下点,有时间拿出来看看,也会发觉不一样的感受.
 

针对 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启动时调用。


    大致信息如此,其他的后续再补充。    
    
   

猜你喜欢

转载自blog.csdn.net/supingemail/article/details/109380653
今日推荐