背景
最近我们新开发的产品要接入公司统一的注册中心以及配置中心。
注册中心使用的是eureka
配置中心使用的是springcloud config
配置bootstrap配置文件报错
当我们配置了配置中心之后,springcloud项目在启动的过程中会创建一个bootstrap上下文环境,加载远程的配置文件,也就是配置中心的配置文件。
所以在项目中配置了bootstrap.yml
用来配置配置中心以及注册中心的地址,进而来取配置文件。
但是配置好bootstrap.yml
文件启动之后报错如下:
分析
我们知道bootstrap.properties
比application.properties
的优先级要高
bootstrap.properties
是系统级的资源配置文件,是用在程序引导执行时更加早期配置信息读取;
application.properties
是用户级的资源配置文件,是用来后续的一些配置所需要的公共参数。
如果你使用的是springboot 2.5.x
以下版本,或者SpringCloud 2020.*
以下版本,就不会出现此问题,因为springboot 2.5.x
以上,SpringCloud 2020.*
以上版本中禁用了bootstrap
模块
解决
方法一
重新引入bootstrap
模块,需要在pom文件中添加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
引入后,在配置bootstrap
配置文件
注意版本,我这边使用了统一的版本管理,如果你没有进行springcloud 版本管理配置,需要引入对应的版本。
方法二
使用springcloud
最新的配置中心文件的引入方式
无需创建bootstrap
配置文件,在application.yml
配置文件中添加以下配置
spring:
config:
import: "optional:configserver:" #拉取配置中心的配置文件,可以指定配置中心server的地址
cloud:
config:
discovery:
enabled: true
service-id: config-server #配置中心的id名称。不要修改,否则无法找到配置中心的服务
profile: dev #启用dev环境的配置文件
username: ***
password: ****
label: master #远程用来存放配置文件的 git的分支
name: demo #要拉取的分支名称
application:
name: demo
eureka:
instance:
prefer-ip-address: true
instance-id: ${spring.cloud.client.ip-address}:${server.port}
client:
service-url:
defaultZone: http://*****/eureka # *****代表注册中心地址