SpringCloud2020 bootstrap 配置文件失效的解决方法
SpringCloud2020版本bootstrap配置文件(properties或者yml)无效
如何解决?
背景介绍
微服务是基于SpringCloud框架搭建的,SpringCloudConfig作为服务配置中心。
业务服务只配置服务名称、启用环境和config的URL地址,其他都配置在配置中心,例如服务端口、服务注册中心地址等。可在开发环境(dev)、测试环境(test)和生产环境(prod)分别配置。
所以预想的启动流程是:先加载配置文件,再启动服务。
之前的做法是,将配置文件名称改为:bootstrap.properties。
问题
之前直接就可以用,而现在,启动的端口是8080,明显没有加载到bootstrap.properties文件,我以为我的文件名字写错了,核对了几次,确认无误,我猜想估计是bootstramp.properties配置文件没有生效。
之前的版本:
- springboot2.3.1.RELEASE
- springcloudHoxton.SR4
当前版本:
- springboot2.4.2
- springcloud2020.0.1
查找原因
根据上面出现的问题,我使用百度搜索了下,大概的原因知道了:从SpringBoot2.4版本开始,配置文件加载方式进行了重构。
另外也有配置的默认值变化,如下:
SpringBoot2.3.8.RELEASE
packageorg.springframework.cloud.bootstrap; publicclassBootstrapApplicationListenerimplementsApplicationListener,Ordered{ publicvoidonApplicationEvent(ApplicationEnvironmentPreparedEventevent){ ConfigurableEnvironmentenvironment=event.getEnvironment(); if((Boolean)environment.getProperty("spring.cloud.bootstrap.enabled",Boolean.class,true)){
SpringBoot2.4.2
packageorg.springframework.cloud.util; publicabstractclassPropertyUtils{ publicstaticbooleanbootstrapEnabled(Environmentenvironment){ return(Boolean)environment.getProperty("spring.cloud.bootstrap.enabled",Boolean.class,false)||MARKER_CLASS_EXISTS; }
传统解决方案
其实官网说得很明白。看下面这段:
ConfigFirstBootstrap
TousethelegacybootstrapwayofconnectingtoConfigServer,bootstrapmustbeenabledviaapropertyorthespring-cloud-starter-bootstrapstarter.Thepropertyisspring.cloud.bootstrap.enabled=true.ItmustbesetasaSystemPropertyorenvironmentvariable.OncebootstraphasbeenenabledanyapplicationwithSpringCloudConfigClientontheclasspathwillconnecttoConfigServerasfollows:Whenaconfigclientstarts,itbindstotheConfigServer(throughthespring.cloud.config.uribootstrapconfigurationproperty)andinitializesSpringEnvironmentwithremotepropertysources.ThenetresultofthisbehavioristhatallclientapplicationsthatwanttoconsumetheConfigServerneedabootstrap.yml(oranenvironmentvariable)withtheserveraddresssetinspring.cloud.config.uri(itdefaultsto"http://localhost:8888").
两个关键点:
1、加一个依赖:spring-cloud-starter-bootstrap
org.springframework.cloud spring-cloud-starter-bootstrap
2、加一个配置:spring.cloud.config.uri
bootstrap.properties #应用名称 spring.application.name=erwin-cloud-user #启用环境 spring.profiles.active=dev #配置文件 spring.cloud.config.label=${spring.application.name} spring.cloud.config.name=${spring.application.name} spring.cloud.config.profile=${spring.profiles.active} spring.cloud.config.uri=http://localhost:9000
解决方案
现在,你只需要这样:
application.properties #应用名称 spring.application.name=erwin-cloud-user #启用环境 spring.profiles.active=dev spring.config.import=optional:configserver:http://localhost:9000 spring.cloud.config.label=${spring.application.name} spring.cloud.config.name=${spring.application.name} spring.cloud.config.profile=${spring.profiles.active}
到此这篇关于SpringCloud2020bootstrap配置文件失效的解决方法的文章就介绍到这了,更多相关SpringCloud2020bootstrap配置内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!