springboot2.5.x版本 bootstrap配置文件不生效

背景

最近我们新开发的产品要接入公司统一的注册中心以及配置中心。 注册中心使用的是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 # *****代表注册中心地址
经验分享 程序员 微信小程序 职场和发展