• Zookeeper系列(6):使用Zookeeper作为配置中心


    在上一篇文章中介绍了Zookeeper作为注册中心使用,在这篇文章中将介绍Zookeeper作为配置中心的使用,废话不多说,直接上代码。

    相关依赖
    <?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 https://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>2.4.5</version>
    		<relativePath/> <!-- lookup parent from repository -->
    	</parent>
    	<groupId>com.example</groupId>
    	<artifactId>zkdemo</artifactId>
    	<version>0.0.1-SNAPSHOT</version>
    	<name>zkdemo</name>
    	<description>Demo project for Spring Boot</description>
    	<properties>
    		<java.version>1.8</java.version>
    		<spring-cloud.version>2020.0.2</spring-cloud.version>
    	</properties>
    	<dependencies>
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-web</artifactId>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework.cloud</groupId>
    			<artifactId>spring-cloud-starter-zookeeper-config</artifactId>
    		</dependency>
    
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-test</artifactId>
    			<scope>test</scope>
    		</dependency>
    	</dependencies>
    	<dependencyManagement>
    		<dependencies>
    			<dependency>
    				<groupId>org.springframework.cloud</groupId>
    				<artifactId>spring-cloud-dependencies</artifactId>
    				<version>${spring-cloud.version}</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>
    
    配置文件application.yml
    spring:
      application:
        name: zkdemo
      profiles:
        active: dev
      cloud:
        zookeeper:
          # Zookeeper服务器地址,集群使用逗号分隔
          connect-string: localhost:2181
      # 从Zookeeper中导入配置数据
      config:
        import: 'optional:zookeeper:'
    
    server:
      port: 8005
    
    在Zookeeper中创建配置节点和数据

    创建配置根节点/config:

    [zk: localhost:2181(CONNECTED) 3] create /config
    Created /config
    

    创建全局配置节点/config/application,/config/application节点下的配置所有服务都能使用。

    [zk: localhost:2181(CONNECTED) 4] create /config/application
    Created /config/application
    

    添加全局配置nickname1:

    [zk: localhost:2181(CONNECTED) 5] create /config/application/nickname1 布禾
    Created /config/application/nickname1
    

    创建zkdemo服务dev环境的配置节点/config/zkdemo,dev,该节点的配置只能被特定服务的特定环境使用,当该节点的配置和全局配置冲突时,优先使用该节点的配置:

    [zk: localhost:2181(CONNECTED) 6] create /config/zkdemo,dev
    Created /config/zkdemo,dev
    

    添加zkdemo服务dev环境配置nickname2:

    [zk: localhost:2181(CONNECTED) 7] create /config/zkdemo,dev/nickname2 buhe
    Created /config/zkdemo,dev/nickname2
    

    最终结构如下:

    测试类
    @SpringBootTest
    class ZkdemoApplicationTests {
    	@Value("${nickname1}")
    	private String nickname1;
    
    	@Value("${nickname2}")
    	private String nickname2;
    
    	@Test
    	public void testZkConfig() {
    		System.out.println("从application全局配置中读取配置:nickname1=" + nickname1);
    		System.out.println("从zkdemo服务配置中读取配置:nickname2=" + nickname2);
    	}
    }
    

    输出结果:

    从application全局配置中读取配置:nickname1=布禾
    从zkdemo服务配置中读取配置:nickname2=buhe
    
    自定义Zookeeper配置

    如果不想使用默认的Zookeeper配置,可以在application.yml更改:

    spring:
      cloud:
        zookeeper:
          config:
            enabled: true
            root: configuration
            default-context: apps
            profile-separator: '::'
    

    enabled:将该值设置为false将禁用Zookeeper配置,默认true。

    root:配置根节点名称,默认为config。

    default-context:全局配置节点名称,默认为application。

    profile-separator:设置服务名和环境名称之间的分隔符,默认为英文逗号。

  • 相关阅读:
    react-绑定this并传参的三种方式
    CSS中使用文本阴影与元素阴影
    react-native构建基本页面2---轮播图+九宫格
    HTML 事件属性
    博客园文章版权声明(js自动生成)
    js 字符串方法 和 数组方法总览
    软工期末各类图复习笔记
    AES算法描述
    DQL查询语言-基础查询、条件查询、排序查询、多表连接查询、子查询、分页查询和联合查询
    Python-模块、包和库
  • 原文地址:https://www.cnblogs.com/seve/p/14708719.html
Copyright © 2020-2023  润新知