IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 分布式配置中心Spring Cloud Config介绍 -> 正文阅读

[Java知识库]分布式配置中心Spring Cloud Config介绍

Spring Cloud Config介绍

用来为分布式系统中的基础设施和微服务应用提供集中化的外部配置支持, 它分为服务端与客户端两个部分。其中服务端也称为分布式配置中心, 它是一个独立的微服务应用,用来连接配置仓库并为客户端提供获取配置信息、加密/解密信息等访问接口;而客户端则是微服务架构中的各个微服务应用或基础设施, 它们通过指定的配置中心来管理应用资源与业务相关的配置内容,并在启动的时候从配置中心获取和加载配置信息。

在这里插入图片描述

Config服务端配置中心搭建

新建配置中心模块

新建Module模块cloud-config-center-3344,它即为Cloud的配置中心模块CloudConfig Center

POM文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>cloud-kernel</artifactId>
        <groupId>com.kernel.springcloud</groupId>
        <version>1.0.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>cloud-config-center-3344</artifactId>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

    <dependencies>

        <!-- spring-cloud-config-server -->
        <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>

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

    </dependencies>

</project>

application.yml 初始配置

server:
  port: 3344

spring:
  application:
    name:  cloud-config-center # 注册进Eureka服务器的微服务名

# 服务注册到eureka地址
eureka:
  client:
    service-url:
      defaultZone: http://localhost:7001/eureka

启动类

@SpringBootApplication
@EnableConfigServer
public class CloudConfigApplication {

    public static void main(String[] args) {

        SpringApplication.run(CloudConfigApplication.class,args);
        
    }
}

配置文件存放本地

application.yml 增加 spring cloud config 配置

server:
  port: 3344

spring:
  application:
    name:  cloud-config-center # 注册进Eureka服务器的微服务名
  profiles:
    active: native #配置文件在本地
  # 配置中心
  cloud:
    config:
      server:
        native:
          search-locations: classpath:/config/ #【重要参数】配置文件的存储位置路径

# 服务注册到eureka地址
eureka:
  client:
    service-url:
      defaultZone: http://localhost:7001/eureka

在这里插入图片描述
file-path-dev.yml

#logo图片存放地址
logoPath: /data/dev/upload/logo

file-path-prod.yml

#logo图片存放地址
logoPath: /data/prod/upload/logo

kernel-system-dev.yml

person:
  userName: zhangsan-dev
  birth: 1996/01/01
  age: 18

kernel-system-prod.yml

person:
  userName: zhangsan-prod
  birth: 1996/01/01
  age: 19

配置文件存放git上

  • 需要事先在 github 或 gitee 等 git 工具上建立相应的的配置中心仓库。一个简单示例:https://gitee.com/shouanzh/spring-cloud-config
  • 其实就是把本地文件的 config 包及包下配置放在 git 仓库里;

application.yml 增加config的git配置

server:
  port: 3344

spring:
  application:
    name:  cloud-config-center # 注册进Eureka服务器的微服务名
  cloud:
    config:
      server:
        #使用 git 作为配置文件存储
        git:
          uri: https://gitee.com/shouanzh/spring-cloud-config #配置文件所在仓库
          username: git 账号
          password: git 密码
          default-label: master #配置文件分支
          search-paths: config  #配置文件所在根目录
          force-pull: true #本地仓库如果有脏数据,则会强制拉取(默认是false)

# 服务注册到eureka地址
eureka:
  client:
    service-url:
      defaultZone: http://localhost:7001/eureka

Spring Cloud Config文件访问方式剖析

启动配置中心 和 Eureka注册中心

仓库中的配置文件会被转换成Web接口,访问请参照以下的规则

label:分支(branch)
profiles:环境(dev/test/prod)
application:服务名

1、/{application}-{profile}.yml

分支默认为yml配置的default-label 值
在这里插入图片描述
2、/{label}/{application}-{profile}.yml(推荐)
在这里插入图片描述
3、/{application}/{profile}[/{label}]
在这里插入图片描述

客户端获取服务端配置示例

引入 pom.xml 依赖

<!--配置中心-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-config</artifactId>
</dependency>

因为每个服务都会将相关配置放在配置中心服务里,因此该依赖可以添加到公共模块里。

bootstrap.yml

applicaiton.yml是用户级的资源配置项

bootstrap.yml是系统级的,优先级更加高

application.yml文件改为bootstrap.yml,这是很关键的,因为bootstrap.yml是比application.yml先加载的。bootstrap.yml优先级高于application.yml。

服务端使用本地存储的读取方式

spring:
  application:
    name: cloud-consumer-service
  cloud:
    config:
      fail-fast: true #是否启动快速失败功能,功能开启则优先判断config server是否正常
      name: kernel-system,file-path # 配置文件名 多个都好拼接 按优先级排序
      profile: ${spring.profiles.active} # dev环境 综上 读取kernel-system-dev.yml file-path-dev.yml
      discovery:
        enabled: true
        service-id: cloud-config-center # 配置中心服务名
  profiles:
    active: dev

测试

@RestController
@Api(tags = "配置中心测试")
public class GetCloudConfigContrller {

    @Value("${person.age}")
    private Integer age;

    @Value("${person.userName}")
    private String name;

    @ApiOperation(value="getConfigInfo")
    @PostMapping(value = "/getConfig/v1")
    public RestResult<UserTest> getConfig() {

        try {

            UserTest userTest = new UserTest();

            userTest.setName(name);
            userTest.setAge(age);

            return RestResult.success(userTest,ResultCode.SUCCESS);

        } catch (Exception e) {
            return RestResult.fail(ResultCode.DATA_ACCESS_ERROR);
        }

    }

}

成功读取到配置中心数据
在这里插入图片描述

服务端使用git存储的读取方式

spring:
  application:
    name: cloud-consumer-service
  cloud:
    #Config客户端配置
    config:
      label: master #分支名称
      name: kernel-system #配置文件名称
      profile: dev #读取后缀名称   上述3个综合:master分支上kernel-system-dev.yml的配置文件被读取http://localhost:3344/master/kernel-system-dev.yml
      uri: http://localhost:3344 #配置中心地址

测试

成功读取到git上的配置文件信息
在这里插入图片描述

动态刷新服务的配置(手动版)

Spring Boot Actuator 提供了一个 @RefreshScope 注解,允许开发团队访问 /refresh 端点,强制 Spring Boot 应用程序重新读取应用程序配置;

引入依赖

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

修改YML,添加暴露监控端口配置:

# 暴露监控端点
management:
  endpoints:
    web:
      exposure:
        include: "*"

Controller 添加 @RefreshScope 注解

@RestController
@Api(tags = "消费端")
@RefreshScope // 配置文件自动刷新
public class GetCloudConfigContrller {

    @Value("${person.age}")
    private Integer age;

    @Value("${person.userName}")
    private String name;

    @ApiOperation(value="getConfigInfo")
    @PostMapping(value = "/getConfig/v1")
    public RestResult<UserTest> getConfig() {

        try {

            UserTest userTest = new UserTest();

            userTest.setName(name);
            userTest.setAge(age);

            return RestResult.success(userTest,ResultCode.SUCCESS);

        } catch (Exception e) {
            return RestResult.fail(ResultCode.DATA_ACCESS_ERROR);
        }

    }

}

测试

启动项目后 修改 git上 的配置文件内容

发送Post请求刷新客户端才会生效

curl -X POST "http://localhost:80/actuator/refresh"

修改前
在这里插入图片描述
修改配置文件

在这里插入图片描述
修改后

并没有生效
在这里插入图片描述
执行post刷新

在这里插入图片描述
再次访问

值已经改变
在这里插入图片描述

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-04-23 10:43:02  更:2022-04-23 10:43:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 4:26:03-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码