SpringCloud-微服务配置统一管理SpringCloud Config

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,182元/月
云原生网关 MSE Higress,422元/月
MSE Nacos/ZooKeeper 企业版试用,1600元额度,限量50份
简介: 前言:对于应用,配制文件通常是放在项目中管理的,它可能有spring、mybatis、log等等各种各样的配置文件和属性文件,另外你还可能有开发环境、测试环境、生产环境等,这样的话就得一式三份,若是传统应用还好说,如果是微服务呢,这样不光配置文件有可能冗余而且量大,繁重复杂,不好维护,这样的话就需要一个配置文件的统一管理了。

前言:对于应用,配制文件通常是放在项目中管理的,它可能有spring、mybatis、log等等各种各样的配置文件和属性文件,另外你还可能有开发环境、测试环境、生产环境等,这样的话就得一式三份,若是传统应用还好说,如果是微服务呢,这样不光配置文件有可能冗余而且量大,繁重复杂,不好维护,这样的话就需要一个配置文件的统一管理了。

一、SpringCloud Config简介

  SpringCloud Config为分布式系统外部化配置提供了服务器端和客户端的支持,它包括ConfigServer和ConfigClient两部分。

    

  Server:

  • 实例一般多于两个,以实现HA;
  • 配置以文件形式存储,快速支持目前以SpringBoot的开发方式的配置文件;
  • 支持GIt,码云,SVN,本地文件等多种形式;
  • 支持属性加密;

  Client:即各自的微服务应用;

  使用SpringCloud BUS配置和借助Git仓库的WebHooks自动刷新;

二、SpringCloud Config基本使用

创建服务端:

  1、前面简单介绍了一下Config,那么首先要做的准备是先到Git仓库或者码云中创建一个项目并新建一些配置文件 spring-cloud-repo

  

  2、创建Maven工程 config-server,添加依赖:

    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-config-server</artifactId>
    </dependency>

   3、创建启动类,并加上开启Config服务端注解@EnableConfigServer:

复制代码
@SpringBootApplication
@EnableConfigServer
public class ConfigApplication {

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

}
复制代码

  4、添加application属性文件:

server.port=9000
spring.application.name=config-server-9000
spring.cloud.config.server.git.uri=https://gitee.com/lfalex/spring-cloud-repo

  5、启动项目,简单测试,访问:localhost:9000/application/dev,localhost:9000/application-dev.properties:

    访问规则:

复制代码
      /{appication}/{profile}/[{label}]

      /{application}-{profile}.yml

      /{application}-{profile}.properties

      /{label}/{application}-{profile}.properties

      /{label}/{application}-{profile}.yml
复制代码

    它们都可以映射到对应的配置文件{application}-{profile}.properties,其中{label}为具体的分支,默认为master;

  

  

创建客户端(一般为具体的微服务):

  1、创建Maven项目 config-client,添加依赖:

复制代码
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!-- 实现Config的客户端配置 -->
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-config</artifactId>
    </dependency>
    <!-- 实现通过端点refresh手动刷新 -->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
复制代码

  2、创建一般启动类即可,无需添加注解,创建Controller,为测试做准备:

复制代码
    @Value("${version}")
    private String version;

    @RequestMapping("/getVersion")
    public String getVersion() {
        return this.version;
    }
复制代码

   3、为了更明显的测试Config是否生效,在application配置文件中添加:

server.port=9001

  4、添加bootstrap.properties配置文件,bootstrap.properties为默认文件名,在springcloud中配置文件有个优先级的概念,当本地application.properties文件和bootstrap.properties文件中配置了同样的属性不同的值,由于bootstrap的优先级高,则在bootstrap中的属性不会被application中的覆盖,反而会覆盖掉application中的配置:

复制代码
#对应着config server所获取配置文件的{application}和URL
spring.application.name=application
spring.cloud.config.uri=http://localhost:9000/
#对应着文件后面的后缀{profile}
spring.cloud.config.profile=dev
#分支
spring.cloud.config.label=master
复制代码

  5、先启动服务器,再启动客户端,观察端口和页面,由于前面在application中添加了端口为9001,而远程仓库的配置文件中也添加了端口9999:

  

  

 这样就实现了基本的远程配置仓库了,但是一旦有文件更改还得重新启动项目,这样就很有问题了,所以需要刷新,使用/refresh端点刷新:

  1、在application或远程文件中添加:

#由于要使用actuator,所以必须要将安全权限关闭
management.security.enabled=false

  2、在controller上添加注解@RefreshScope注解:

@RestController
@RefreshScope       //非重启项目手动刷新配置注解
public class ConfigController {
      。。。。      
}

  3、启动测试,打开,修改version=dev-3.0.0为version=dev-4.0.0,并发送刷新请求http://localhost:9999/refresh,刷新测试页面查看:

  

  

  

三、SpringCloud Bus自动刷新配置

  前面的基于端点刷新,只针对一个服务,若为多个微服务,这样就很繁琐,所以需要一个可以集体刷新或指定刷新的组件=》SpringCloud Bus;

  1、使用SpringCloud Bus需要使用RabbitMQ,未安装的请安装,基于之前的端点刷新的项目,添加依赖:

    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-bus-amqp</artifactId>
    </dependency>

  2、在bootstrap中增加RabbitMQ的配置:

spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest

  3、启动 config-bus-client测试,打开,修改version=dev-3.0.0为version=dev-4.0.0,并发送刷新请求http://localhost:9999/bus/refresh,刷新测试页面查看:

  

  

  

  

  还可以通过Git或者码云的WebHooks来发送修改刷新配置请求:

  

相关实践学习
快速体验阿里云云消息队列RocketMQ版
本实验将带您快速体验使用云消息队列RocketMQ版Serverless系列实例进行获取接入点、创建Topic、创建订阅组、收发消息、查看消息轨迹和仪表盘。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
相关文章
|
15天前
|
算法 Java 微服务
【SpringCloud(1)】初识微服务架构:创建一个简单的微服务;java与Spring与微服务;初入RestTemplate
微服务架构是What?? 微服务架构是一种架构模式,它提出将单一应用程序划分为一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。 每个服务允许在其独立的进程中,服务于服务间采用轻量级的通信机制互相协作(通常是Http协议的RESTful API或RPC协议)。 每个服务都围绕着具体业务进行构建,并且能够被独立的部署到生产环境、类生产环境等。另外应当尽量避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据上下文,选择合适的语言、工具对其进行构建
324 126
|
15天前
|
负载均衡 算法 Java
【SpringCloud(2)】微服务注册中心:Eureka、Zookeeper;CAP分析;服务注册与服务发现;单机/集群部署Eureka;连接注册中心
1. 什么是服务治理? SpringCloud封装了Netfix开发的Eureka模块来实现服务治理 在传统pc的远程调用框架中,管理每个服务与服务之间依赖关系比较复杂,管理比较复杂,所以需要使用服务治理,管理服务于服务之间依赖关系,可以实现服务调用、负载均衡、容错等,实现服务发现与注册
101 0
|
2月前
|
监控 Java API
Spring Boot 3.2 结合 Spring Cloud 微服务架构实操指南 现代分布式应用系统构建实战教程
Spring Boot 3.2 + Spring Cloud 2023.0 微服务架构实践摘要 本文基于Spring Boot 3.2.5和Spring Cloud 2023.0.1最新稳定版本,演示现代微服务架构的构建过程。主要内容包括: 技术栈选择:采用Spring Cloud Netflix Eureka 4.1.0作为服务注册中心,Resilience4j 2.1.0替代Hystrix实现熔断机制,配合OpenFeign和Gateway等组件。 核心实操步骤: 搭建Eureka注册中心服务 构建商品
487 3
|
9天前
|
负载均衡 Java API
《深入理解Spring》Spring Cloud 构建分布式系统的微服务全家桶
Spring Cloud为微服务架构提供一站式解决方案,涵盖服务注册、配置管理、负载均衡、熔断限流等核心功能,助力开发者构建高可用、易扩展的分布式系统,并持续向云原生演进。
|
1月前
|
监控 安全 Java
Spring Cloud 微服务治理技术详解与实践指南
本文档全面介绍 Spring Cloud 微服务治理框架的核心组件、架构设计和实践应用。作为 Spring 生态系统中构建分布式系统的标准工具箱,Spring Cloud 提供了一套完整的微服务解决方案,涵盖服务发现、配置管理、负载均衡、熔断器等关键功能。本文将深入探讨其核心组件的工作原理、集成方式以及在实际项目中的最佳实践,帮助开发者构建高可用、可扩展的分布式系统。
138 1
|
1月前
|
jenkins Java 持续交付
使用 Jenkins 和 Spring Cloud 自动化微服务部署
随着单体应用逐渐被微服务架构取代,企业对快速发布、可扩展性和高可用性的需求日益增长。Jenkins 作为领先的持续集成与部署工具,结合 Spring Cloud 提供的云原生解决方案,能够有效简化微服务的开发、测试与部署流程。本文介绍了如何通过 Jenkins 实现微服务的自动化构建与部署,并结合 Spring Cloud 的配置管理、服务发现等功能,打造高效、稳定的微服务交付流程。
246 0
使用 Jenkins 和 Spring Cloud 自动化微服务部署
|
1月前
|
Kubernetes Java 微服务
Spring Cloud 微服务架构技术解析与实践指南
本文档全面介绍 Spring Cloud 微服务架构的核心组件、设计理念和实现方案。作为构建分布式系统的综合工具箱,Spring Cloud 为微服务架构提供了服务发现、配置管理、负载均衡、熔断器等关键功能的标准化实现。本文将深入探讨其核心组件的工作原理、集成方式以及在实际项目中的最佳实践,帮助开发者构建高可用、可扩展的分布式系统。
306 0
|
4月前
|
负载均衡 Java API
基于 Spring Cloud 的微服务架构分析
Spring Cloud 是一个基于 Spring Boot 的微服务框架,提供全套分布式系统解决方案。它整合了 Netflix、Zookeeper 等成熟技术,通过简化配置和开发流程,支持服务发现(Eureka)、负载均衡(Ribbon)、断路器(Hystrix)、API网关(Zuul)、配置管理(Config)等功能。此外,Spring Cloud 还兼容 Nacos、Consul、Etcd 等注册中心,满足不同场景需求。其核心组件如 Feign 和 Stream,进一步增强了服务调用与消息处理能力,为开发者提供了一站式微服务开发工具包。
522 0
|
8月前
|
Cloud Native Java Nacos
springcloud/springboot集成NACOS 做注册和配置中心以及nacos源码分析
通过本文,我们详细介绍了如何在 Spring Cloud 和 Spring Boot 中集成 Nacos 进行服务注册和配置管理,并对 Nacos 的源码进行了初步分析。Nacos 作为一个强大的服务注册和配置管理平台,为微服务架构提供
3302 14

热门文章

最新文章