Spring Cloud 配置中心

2019-07-11 0 By admin

Spring Cloud 配置中心的主流实现方式有下面两种。

一、Spring Cloud Config

Spring cloud config就是和git(svn)集成来实现配置中心。Spring cloud config分服务端、客户端和git(svn)三部分。
服务端负责将Git(SVN)中存储的配置文件发布成REST接口,
客户端可以从服务端REST接口获取配置(但客户端并不能主动感知到配置的变化,从而主动去获取新的配置,这需要每个客户端通过POST方法触发各自的/refresh)。
其中通过git本身的属性可以达到配置版本控制的目的。有缓存形式,先把config下载到服务端本地再提供给客户端,提高可靠性。

二、Spring Cloud Zookeeper Config

该项目通过自动配置并绑定到Spring环境,为Spring Boot应用程序提供Zookeeper集成。
Zookeeper提供了一个分层命名空间,允许客户端存储任意数据,如配置数据。Spring Cloud Zookeeper Config是Config Server和Client的替代方案。

三、两者的比较

1、Spring Cloud Config 通过文件系统,git/svn仓库来管理配置文件。包含客户端、服务端和git/svn仓库。通过git/svn特性可以达到版本控制
2、Spring Cloud Zookeeper Config 通过Zookeeper分级命名空间来储存配置项数据,另外Zookeeper可以实时监听节点变化和通知机制。

一、Java 代码中使用Spring-couod-starter-zookeeper-config

Spring Cloud Zookeeper Config 主要分为两部分,client端和zookeeper。
client端内嵌在spring-cloud-starter-zookeeper-config中,用的是netflix开源的CuratorFramework 来连接zookeeper获取配置数据。在微服务启动时候加载到environment中。

1、客户端pom.xml中加入依赖

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

2、客户端添加配置信息

配置文件bootstrap.yml(ootstrap.properties)中加入zookeeper连接信息。

spring:
  application:
    name: testApp
  cloud:
    zookeeper:
      enabled: true  # true:开启zookeeper外部化配置, false:读取本地配置; 
      connect-string: IP1:port1,IP2:port2,IP3:port3
      config:
        root: /config/dev
        enabled: true
        watcher:
          enabled: false

属性详解:
1、connect-string:ZooKeeper的地址,如果是集群,逗号分隔节点,格式:ip:port[,ip2:port2,…..]
2、root:指定zookeeper中,属性的根目录
3、spring.application.name: 定义你的项目的名称,zk会在你指定的根目录下寻找以这个项目名命名的目录下的配置
4、watcher.enabled: 默认值是true, 监控配置变更后是否自动更新,需配合Spring Boot Actuators 使用

3、Zookeeper 添加配置信息

属性命名规则(假设你在上面的root配置项设置为/config/dev):
/config/dev/{application-name},{profile}={key}={value}
服务名和dev (profile名)以逗号隔开,可以设置spring.cloud.zookeeper.config.profile-separator 来用其他符号隔开,譬如”-”等。

4、客户端Java 获取配置信息的方法

1、通过@Value注解

@Value("${db.url}")
String dbUrl;

2、配置文件(xml)中直接使用(用${propertyName})

<bean id="globalDbConfig" class="com.demo.connector.GlobalDbConfig">
    <property name="globalDbUsername" value="${global.username}"/>
    <property name="globalDbPassword" value="${global.password}"/>
</bean>

5、客户端Java 动态获取配置信息的方法

1、客户端pom.xml添加如下依赖

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

2、在bootstrap.yml/bootstrap.properties 配置文件中打开watcher

spring.cloud.zookeeper.config.watcher.enabled=true

3、Bean上添加@RefreshScope注解

5、配置读取简介

配置信息在服务启动时加载到Spring Environment中。配置信息默认存放在/config命名空间下。
例如,应用名为“testApp”,环境“dev”,则下列配置源会被创建:
- config/testApp,dev
- config/testApp
- config/application,dev
- config/application

最为具体的配置源放在最上面,最泛化的放在最下面。config/application命名空间下的属性会被用于所有应用。config/testApp命名空间下的属性只会被“testApp”服务的实例使用,其他服务不能使用。

6、配置优先级

远程配置(zookeeper等) > 命令行参数配置 > application.yml> bootstrap.yml