springcloud-config详解(含java代码)

本文详细介绍了SpringCloudConfig的配置原理和实现步骤,包括服务端和客户端的设置,配置信息的获取,配置更新的刷新机制,以及通过Eureka实现的服务发现。此外,还展示了如何添加安全认证以及搭建高可用的配置中心集群。通过实例展示了如何从Git仓库读取不同环境的配置信息,并在客户端应用中动态刷新配置。
摘要由CSDN通过智能技术生成

什么是springcloud config

  • Spring Cloud Config 分为服务端和客户端两个部分。
    • 服务端被称为分布式配置中心,它是个独立的应用,可以从配置仓库获取配置信息并提供给客户端使用。
    • 客户端可以通过配置中心来获取配置信息,在启动时加载配置。
      • Spring Cloud Config 的配置中心默认采用Git来存储配置信息,所以天然就支持配置信息的版本管理,并且可以使用Git客户端来方便地管理和访问配置信息。也支持本地存储以及Subversion
  • 需要配合springcloud bus使用

原理

  • springCloud-Config分服务端和客户端
    • 服务端负责将本地,git或者svn中存储的配置文件发布成REST风格的接口
    • 客户端可以从服务端REST接口获取配置。
      • 客户端并不能主动感知到配置的变化,从而主动去获取新的配置,这需要每个客户端通过POST方法触发各自的/refresh接口。即springcloud-bus

Java实现config

git仓库准备配置信息

在这里插入图片描述

master分支下的配置信息
  • config-dev.yml:
config:
  info: "config info for dev(master)"
  • config-test.yml:
config:
  info: "config info for test(master)"
  • config-prod.yml:

config:
  info: "config info for prod(master)"
dev分支下的配置信息
  • config-dev.yml:
config:
  info: "config info for dev(dev)"
  • config-test.yml:
config:
  info: "config info for test(dev)"
  • config-prod.yml:
config:
  info: "config info for prod(dev)"
创建config-server模块
  • 在pom.xml中添加相关依赖
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-config-server</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
  • 在application.yml中进行配置
server:
  port: 8901
spring:
  application:
    name: config-server
  cloud:
    config:
      server:
        git: #配置存储配置信息的Git仓库
          uri: https://gitee.com/macrozheng/springcloud-config.git
          username: macro
          password: 123456
          clone-on-start: true #开启启动时直接从git获取配置
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8001/eureka/
  • 在启动类上添加@EnableConfigServer注解来启用配置中心功能
@EnableConfigServer
@EnableDiscoveryClient
@SpringBootApplication
public class ConfigServerApplication {

    public static void main(String[] args) {
        SpringApplication.run(ConfigServerApplication.class, args);
    }

}
通过config-server获取配置信息
  • 获取配置文件信息的访问格式
# 获取配置信息
/{label}/{application}-{profile}
# 获取配置文件信息
/{label}/{application}-{profile}.yml
  • 占位符相关解释
    • application:代表应用名称
      • 默认为配置文件中的spring.application.name
      • 如果配置了spring.cloud.config.name,则为该名称
    • label:代表分支名称
      • 对应配置文件中的spring.cloud.config.label;
    • profile:代表环境名称
      • 对应配置文件中的spring.cloud.config.profile。
  • 获取配置信息演示
  • 启动eureka-server、config-server服务;
  • 访问http://localhost:8901/master/config-dev来获取master分支上dev环境的配置信息;
    在这里插入图片描述
  • 访问http://localhost:8901/master/config-dev.yml来获取master分支上dev环境的配置文件信息,对比上面信息,可以看出配置信息和配置文件信息并不是同一个概念;
    在这里插入图片描述
  • 访问http://localhost:8901/master/config-test.yml来获取master分支上test环境的配置文件信息:
    在这里插入图片描述
  • 访问http://localhost:8901/dev/config-dev.yml来获取dev分支上dev环境的配置文件信息:
    在这里插入图片描述
创建config-client模块
  • pom
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
  • 在bootstrap.yml中进行配置
server:
  port: 9001
spring:
  application:
    name: config-client
  cloud:
    config: #Config客户端配置
      profile: dev #启用配置后缀名称
      label: dev #分支名称
      uri: http://localhost:8901 #配置中心地址
      name: config #配置文件名称
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8001/eureka/
  • 添加ConfigClientController类用于获取配置
@RestController
public class ConfigClientController {

    @Value("${config.info}")
    private String configInfo;

    @GetMapping("/configInfo")
    public String getConfigInfo() {
        return configInfo;
    }
}
演示从配置中心获取配置
config info for dev(dev)
  • 获取子目录下的配置
    • 我们不仅可以把每个项目的配置放在不同的Git仓库存储,也可以在一个Git仓库中存储多个项目的配置,此时就会用到在子目录中搜索配置信息的配置。
    • 首先我们需要在config-server中添加相关配置,用于搜索子目录中的配置,这里我们用到了application占位符,表示对于不同的应用,我们从对应应用名称的子目录中搜索配置,比如config子目录中的配置对应config应用;
spring:
  cloud:
    config:
      server:
        git: 
          search-paths: '{application}'
config info for config dir dev(dev)
刷新配置
  • 当Git仓库中的配置信息更改后,我们可以通过SpringBoot Actuator的refresh端点来刷新客户端配置信息,以下更改都需要在config-client中进行。
  • pom添加依赖
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
  • 在bootstrap.yml中开启refresh端点:
management:
  endpoints:
    web:
      exposure:
        include: 'refresh'
  • 在ConfigClientController类添加@RefreshScope注解用于刷新配置:
@RestController
@RefreshScope
public class ConfigClientController {

    @Value("${config.info}")
    private String configInfo;

    @GetMapping("/configInfo")
    public String getConfigInfo() {
        return configInfo;
    }
}
  • 重新启动config-client后,调用refresh端点进行配置刷新
    在这里插入图片描述
  • 访问http://localhost:9001/configInfo进行测试,可以发现配置信息已经刷新。
update config info for config dir dev(dev)

配置中心添加安全认证

  • 创建config-security-server模块
  • 在pom.xml中添加相关依赖:
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-config-server</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>
  • 在application.yml中进行配置:
erver:
  port: 8905
spring:
  application:
    name: config-security-server
  cloud:
    config:
      server:
        git:
          uri: https://gitee.com/xxx.git
          username: test
          password: 123456
          clone-on-start: true #开启启动时直接从git获取配置
  security: #配置用户名和密码
    user:
      name: test
      password: 123456
  • 启动config-security-server服务
  • 修改config-client的配置
    • 添加bootstrap-security.yml配置文件,主要是配置了配置中心的用户名和密码:
server:
  port: 9002
spring:
  application:
    name: config-client
  cloud:
    config:
      profile: dev #启用配置后缀名称
      label: dev #分支名称
      uri: http://localhost:8905 #配置中心地址
      name: config #配置文件名称
      username: test
      password: 123456
config info for dev(dev)

config-sever集群搭建

  • 在微服务架构中,所有服务都从配置中心获取配置,配置中心一旦宕机,会发生很严重的问题,下面我们搭建一个双节点的配置中心集群来解决该问题。
  • 启动两个config-server分别运行在8902和8903端口上;
  • 添加config-client的配置文件bootstrap-cluster.yml,主要是添加了从注册中心获取配置中心地址的配置并去除了配置中心uri的配置:
spring:
  cloud:
    config:
      profile: dev #启用环境名称
      label: dev #分支名称
      name: config #配置文件名称
      discovery:
        enabled: true
        service-id: config-server
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8001/eureka/
  • 以bootstrap-cluster.yml启动config-client服务,注册中心显示信息如下:
    在这里插入图片描述
  • 访问http://localhost:9003/configInfo,发现config-client可以获取到配置信息。
config info for config dir dev(dev)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值