Spring Cloud Config配置中心的两种配置方式详解

本文详述了Spring Cloud Config的配置管理方案,包括本地配置和使用Git配置的两种方式。本地配置虽简单,但配置变更需重启服务,推荐使用Git配置。服务端配置涉及依赖、启动类注解、配置文件及properties文件。客户端配置需引入依赖,配置bootstrap.properties文件以获取服务端数据。使用Git配置时,配置变更需手动刷新,客户端通过refresh接口更新配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

每天坚持三件事:看脸,看秤,看余额!如果脸不够帅气,体重不够低,余额不够多,那么,请继续奋斗!——摘自知乎

Spring Cloud Config

Spring Cloud Config项目是一个解决分布式系统的配置管理方案。它包含了Client和Server两个部分,server提供配置文件的存储、以接口的形式将配置文件的内容提供出去,client通过接口获取数据、并依据此数据初始化自己的应用。Spring cloud使用git或svn存放配置文件,默认情况下使用git

第一种,本地配置

缺点:
将配置文件配置在本地的时候,如果配置文件发生改变,就需要重启配置中心,会造成配置中心的服务终断,可能会造成较大的损失,解决方案是可以将配置中心集群,需要改变配置文件的时候,一个一个的修改,修改完一个注册上去,没修改的先不注册,但是这样还是很麻烦,所以推荐第二种用git配置的方式。

配置中心的服务端配置:

1、添加依赖
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-server</artifactId>
        </dependency>
2、在启动类上添加注解
@EnableConfigServer
3、配置文件
server.port=8100
spring.application.name=ConfigService

#使用本地存储
spring.profiles.active=native
#配置文件的存放的位置
spring.cloud.config.server.native.search-locations=classpath:properties
#注册到eureka上
eureka.client.service-url.defaultZone=http://localhost:9000/eureka
4、properties文件夹下的配置文件

根据在application.yml文件中配置的位置和名称,在resource底下新建一个properties文件夹,在其中可以添加各种环境下的配置文件,比如开发环境,测试环境,生产环境。如下:
文件的neo-config-dev,中的neo-config是文件名,dev是环境

在不同的文件中配置不同环境下的配置,比如在neo-config-dev文件下配置数据库的相关信息:

spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/jpa?useSSL=true&serverTimezone=UTC&characterEecoding=UTF-8
spring.datasource.username=root
spring.datasource.password=123456

服务端配置完成,在浏览器中输入http://localhost:8100/neo-config/dev查看配置中心是否配置好

配置中心的客户端

配置中心的客户端其实就是需要引入在配置中心服务端的配置的服务模块,比如需要在dao中需要引入数据库的配置信息,那么,配置过程如下。

1、相关依赖
   <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
        </dependency>
2、配置bootstrap.properties文件

bootstrap.properties文件优先于application.yml文件加载,在服务模块启动的时候最先加载

下面的是application.yml文件,将其中的数据库的配置信息转移到了配置中心的服务端了,所以注释掉了。而其中的注册到eureka的信息转移到了bootstrap.properties文件中,目的是让该模块在启动的时候先注册到注册中心,先加载数据库的配置信息。

server:
  port: 8082
spring:
  application:
    name: DaoService
#  datasource:
#    driver-class-name: com.mysql.cj.jdbc.Driver
#    url: jdbc:mysql://localhost:3306/jpa?useSSL=true&serverTimezone=UTC&characterEecoding=UTF-8
#    username: root
#    password: 123456
#
#eureka:
#  client:
#    service-url:
#      defaultZone: http://localhost:9000/eureka
mybatis:
  mapper-locations: /mapper/*Dao.xml

下面的就是bootstrap.properties文件的配置信息

# 配置中心的服务端配置文件的名,前有说明
spring.cloud.config.name=neo-config

# 配置文件的应用环境,前有说明
spring.cloud.config.profile=dev

# 配置中心在注册中心上的名称,从该服务上抓取配置信息
spring.cloud.config.discovery.service-id=ConfigService
spring.cloud.config.discovery.enabled=true

# 如果不将配置中心注册到注册中心eureka上的时候,可以采用如下的方法直接调取,8100为配置中心的端口号
#spring.cloud.config.uri=http://localhost:8100

eureka.client.service-url.defaultZone=http://localhost:9000/eureka

使用git配置

缺点:
配置到git上之后,每次配置文件发生改变,服务模块不能及时的获取到信息,需要人工的来刷新。具体刷新在配置步骤之后,但是该方法完全依赖于网络,如果网络不可用,存于git中的配置都将不可用。具体配置如下:

在码云或者github上建好仓库,将之前的三个不同开发环境的配置文件传到该仓库中,如下:
在这里插入图片描述

其他和本地配置不同的只有配置中心服务端的配置文件中,修改为如下

server.port=8100
spring.application.name=ConfigService

#使用本地存储
#spring.profiles.active=native
#配置文件的存放的位置
#spring.cloud.config.server.native.search-locations=classpath:properties
#注册到eureka上
eureka.client.service-url.defaultZone=http://localhost:9000/eureka

#以下是git配置

#git仓库地址
spring.cloud.config.server.git.uri=https://gitee.com/Ronny3/config-server.git

# git仓库地址下的相对地址,可以配置多个,用,分割。
spring.cloud.config.server.git.search-paths=config-server

#git仓库账号和密码
spring.cloud.config.server.git.username=Ronny3
spring.cloud.config.server.git.password=******

在浏览器中输入http://localhost:8100/neo-config/dev查看配置中心是否配置好。

refresh 刷新

以下的配置都是在配置中心的客户端,也就是需要用到配置的服务模块中添加的设置。

Spring Cloud Config分服务端和客户端,服务端负责将git(或svn)中存储的配置文件发布成REST接口,客户端可以从服务端REST接口获取配置。但客户端并不能主动感知到配置的变化,从而主动去获取新的配置。客户端如何去主动获取新的配置信息呢?
springcloud已经给我们提供了解决方案,每个客户端通过POST方法触发各自的/refresh

修改spring-cloud-config-client项目已到达可以refresh的功能。添加的依赖:

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

spring-boot-starter-actuator是一套监控的功能,可以监控程序在运行时状态,其中就包括/refresh的功能。

添加配置文件

在配置文件中添加如下配置

management.endpoints.web.exposure.include=refresh
开启更新机制

给需要用到配置的类上添加注解@RefreshScope,添加上之后会在接到SpringCloud配置中心配置刷新的时候,自动将新的配置更新到该类对应的字段中。

重新拉取配置

以post请求的方式来访问http://localhost:8082/actuator/refresh 就会更新修改后的配置文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值