SpringCloud微服务框架04 - Config统一配置中心

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,118元/月
云原生网关 MSE Higress,422元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: SpringCloud微服务框架04 - Config统一配置中心

本系列持续更新中


SpringCloud微服务框架01-SpringCloud简介

SpringCloud微服务框架02-Eureka服务注册与发现

SpringCloud微服务框架03 - Ribbon负载均衡

SpringCloud微服务框架04 - Config统一配置中心


文章中设计到的项目源码,会逐步整理到github上。github除了本系列文章设计到的源码信息,还有Spring Cloud整合的项目框架。有同样正在学习Spring Cloud的小伙伴可以加我一起学习交流。


github地址:https://github.com/hack-feng/maple-cloud


一、Spring Cloud Config 是什么


Spring Cloud Config 是用来为分布式系统中的基础设施和微服务应用提供的集中化的外部配置支持。分为服务端和客户端两个部分。其中服务端也称为分布式配置中心,它是一个独立的微服务应用,用来连接配置仓库并为客户端提供获取配置信息。实现了对服务器端和客户端中环境变量和属性配置的抽象映射。


说直白一点:就是把springboot项目中的application.yml配置文件抽取出来,放在一起统一管理。


可以将配置信息放在git,svn或本地化的文件系统。


二、构建Spring Cloud Config配置中心


  • 创建一个springboot工程,命名为config-demo,并在pom.xml文件引入下面依赖:


<?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">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.9.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.maple</groupId>
    <artifactId>config-demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>config-demo</name>
    <description>Demo project for Spring Boot</description>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <!-- 引入config-server配置中心 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-server</artifactId>
        </dependency>
    </dependencies>
    <!-- 引入spring cloud -->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Dalston.SR3</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>
  • 在springboot项目程序主类添加@EnableConfigServer注解,开启Spring Cloud Config的服务功能。
@SpringBootApplication
@EnableConfigServer
public class ConfigDemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConfigDemoApplication.class, args);
    }
}
  • 在application.yml中添加配置服务的基本信息以及Git仓库的相关信息。
server:
  port: 2001
spring:
  application:
    name: config-demo
  cloud:
    config:
      profile: dev
      server:
        git:
          uri: https://github.com/hack-feng/maven-cloud-demo
          search-paths: /
          # username: username 公有库不需要设置账号密码
          # password: password    
      label: master


Git的配置分别对应以下内容

  • spring.cloud.config.profile:对应的是开发版本,对应配置规则中的profile,见下面介绍
  • spring.cloud.config.label:Git代码的分支信息,默认是master
  • spring.cloud.config.server.uri:配置Git仓库位置
  • spring.cloud.config.server.search-paths:配置Git仓库路径下的相对搜索位置,可以配置多个
  • spring.cloud.config.server.username:配置Git仓库用户名,共有库可以不设置
  • spring.cloud.config.server.password:配置Git仓库密码


配置规则详解


在Git仓库中https://github.com/hack-feng/maven-cloud-demo下创建以下配置文件


  • maple-config.yml
  • maple-config-dev.yml
  • maple-config-test.yml
    内容对应:
mycontent: default-1.0
mycontent: dev-1.0
mycontent: test-1.0

注意使用yml格式 :后面跟一个空格

端点与配置文件的映射规则如下:

  • /{application}/{profile}[/{label}]
  • /{application}-{profile}.yml
  • /{label}/{application}-{profile}.yml
  • /{application}-{profile}.properties
  • /{label}/{application}-{profile}.properties

{application}表示微服务的名字,即:spring.application.name

{profile}表示开发版本,即:spring.cloud.config.profile

{label}表示Git仓库的分支,即:spring.cloud.config.label


启动项目,访问:http://127.0.0.1:2001/maple-config/dev如下图

20190713210916763_.png

至此,已成功构建了Config Server,并通过构造URL方式,获取了Git仓库的配置信息。


三、编写config Client


上文已经构造了config-demo,并使用Config Server端点获取到了配置信息。接下来讨论SpringCloud微服务如何获取配置信息。


  • 创建一个springBoot工程,命名为:config-client-demo ,pom.xml文件如下:


<?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">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.9.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.maple</groupId>
    <artifactId>config-client-demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>config-client-demo</name>
    <description>Demo project for Spring Boot</description>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!-- 引入web模块 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- 引入config客户端 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-boot-starter-config</artifactId>
        </dependency>
    </dependencies>
    <!-- 引入spring cloud -->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Dalston.SR3</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>
  • springboot项目程序主类程序。
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class ConfigClientDemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConfigClientDemoApplication.class, args);
    }
}
  • 创建bootstarp.yml配置,指定congfig-server的位置,如下
spring:
  application:
    name: maple-config
  cloud:
    config:
      uri: http://localhost:2001
      profile: dev
      label: master
server:
  port: 2002
  • 创建测试ConfigTestController.java 内容如下
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class ConfigTestController {
    @Value("${mycontent}")
    private String mycontent;
    @GetMapping(value = "test")
    public String test(){
        return "获取到配置中心的内容:" + mycontent;
    }
}

启动项目时,打印一下内容,则表示调用配置服务成功。

2019-07-13 21:50:46.750  INFO 10360 --- [           main] c.c.c.ConfigServicePropertySourceLocator : Fetching config from server at: http://localhost:2001
2019-07-13 21:50:48.982  INFO 10360 --- [           main] c.c.c.ConfigServicePropertySourceLocator : Located environment: name=maple-config, profiles=[dev], label=master, version=d716392074e316e6cec9b4311e3bad52fb1ea91d, state=null
2019-07-13 21:50:48.983  INFO 10360 --- [           main] b.c.PropertySourceBootstrapConfiguration : Located property source: CompositePropertySource [name='configService', propertySources=[MapPropertySource {name='configClient'}, MapPropertySource {name='https://github.com/hack-feng/maven-cloud-demo/maple-config-dev.yml'}, MapPropertySource {name='https://github.com/hack-feng/maven-cloud-demo/maple-config.yml'}]]

到这里spring Cloud Config统一配置中心就搭建好了。

目录
相关文章
|
15天前
|
Java 开发者 微服务
从单体到微服务:如何借助 Spring Cloud 实现架构转型
**Spring Cloud** 是一套基于 Spring 框架的**微服务架构解决方案**,它提供了一系列的工具和组件,帮助开发者快速构建分布式系统,尤其是微服务架构。
128 68
从单体到微服务:如何借助 Spring Cloud 实现架构转型
|
2月前
|
Dubbo Java 应用服务中间件
Spring Cloud Dubbo:微服务通信的高效解决方案
【10月更文挑战第15天】随着信息技术的发展,微服务架构成为企业应用开发的主流。Spring Cloud Dubbo结合了Dubbo的高性能RPC和Spring Cloud的生态系统,提供高效、稳定的微服务通信解决方案。它支持多种通信协议,具备服务注册与发现、负载均衡及容错机制,简化了服务调用的复杂性,使开发者能更专注于业务逻辑的实现。
69 2
|
12天前
|
Java Nacos Sentinel
Spring Cloud Alibaba:一站式微服务解决方案
Spring Cloud Alibaba(简称SCA) 是一个基于 Spring Cloud 构建的开源微服务框架,专为解决分布式系统中的服务治理、配置管理、服务发现、消息总线等问题而设计。
133 13
Spring Cloud Alibaba:一站式微服务解决方案
|
19天前
|
负载均衡 Java 开发者
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
62 5
|
25天前
|
Java 网络安全 Nacos
Nacos作为流行的微服务注册与配置中心,其稳定性与易用性广受好评
Nacos作为流行的微服务注册与配置中心,其稳定性与易用性广受好评。然而,“客户端不发送心跳检测”是使用中常见的问题之一。本文详细探讨了该问题的原因及解决方法,包括检查客户端配置、网络连接、日志、版本兼容性、心跳检测策略、服务实例注册状态、重启应用及环境变量等步骤,旨在帮助开发者快速定位并解决问题,确保服务正常运行。
44 5
|
1月前
|
网络安全 Nacos 开发者
Nacos作为流行的微服务注册与配置中心,“节点提示暂时不可用”是常见的问题之一
Nacos作为流行的微服务注册与配置中心,其稳定性和易用性备受青睐。然而,“节点提示暂时不可用”是常见的问题之一。本文将探讨该问题的原因及解决方案,帮助开发者快速定位并解决问题,确保服务的正常运行。通过检查服务实例状态、网络连接、Nacos配置、调整健康检查策略等步骤,可以有效解决这一问题。
36 4
|
1月前
|
Java 网络安全 Nacos
Nacos作为流行的微服务注册与配置中心,其稳定性和易用性备受青睐。
Nacos作为流行的微服务注册与配置中心,其稳定性和易用性备受青睐。然而,实际使用中常遇到“客户端不发送心跳检测”的问题。本文深入探讨该问题的原因及解决方案,帮助开发者快速定位并解决问题,确保服务正常运行。通过检查客户端配置、网络连接、日志、版本兼容性、心跳策略、注册状态、重启应用和环境变量等步骤,系统地排查和解决这一问题。
51 3
|
1月前
|
安全 Nacos 数据库
Nacos是一款流行的微服务注册与配置中心,但直接暴露在公网中可能导致非法访问和数据库篡改
Nacos是一款流行的微服务注册与配置中心,但直接暴露在公网中可能导致非法访问和数据库篡改。本文详细探讨了这一问题的原因及解决方案,包括限制公网访问、使用HTTPS、强化数据库安全、启用访问控制、监控和审计等步骤,帮助开发者确保服务的安全运行。
45 3
|
2月前
|
Dubbo Java 应用服务中间件
Dubbo学习圣经:从入门到精通 Dubbo3.0 + SpringCloud Alibaba 微服务基础框架
尼恩团队的15大技术圣经,旨在帮助开发者系统化、体系化地掌握核心技术,提升技术实力,从而在面试和工作中脱颖而出。本文介绍了如何使用Dubbo3.0与Spring Cloud Gateway进行整合,解决传统Dubbo架构缺乏HTTP入口的问题,实现高性能的微服务网关。
|
2月前
|
JSON Java 数据格式
【微服务】SpringCloud之Feign远程调用
本文介绍了使用Feign作为HTTP客户端替代RestTemplate进行远程调用的优势及具体使用方法。Feign通过声明式接口简化了HTTP请求的发送,提高了代码的可读性和维护性。文章详细描述了Feign的搭建步骤,包括引入依赖、添加注解、编写FeignClient接口和调用代码,并提供了自定义配置的示例,如修改日志级别等。
124 1
下一篇
DataWorks