前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SpringCloud技术指南系列(九)配置管理之Zookeeper配置中心

SpringCloud技术指南系列(九)配置管理之Zookeeper配置中心

作者头像
品茗IT
发布2019-09-12 09:42:30
1.5K0
发布2019-09-12 09:42:30
举报
文章被收录于专栏:品茗IT

SpringCloud技术指南系列(九)配置管理之Zookeeper配置中心

一、概述

Spring Boot应用的配置文件有多种:

    1. 我们可以将配置内容写入application.yml
    1. 设置多个profile,也可以用多个application-{profile}.properties文件配置
    1. 命令行参数
    1. 自定义配置文件
    1. 配置中心

详细可以查看《SpringBoot入门建站全系列(二十三)配置文件优先级及常用配置方式》.

以上,除了配置中心,其他方式都不能动态去改变配置,并且生效,只有配置中心可以动态修改配置并生效。当然,并不是所有配置都能生效的,Spring加载后不再变化的配置,是不可能动态改变的,比如启动参数、zuul/gateway代理转发配置.

上一篇《SpringCloud技术指南系列(八)配置管理之Consul配置中心》,我们讲的是如何使用consul做配置中心对配置进行管理。这一篇,我们讲一下如果使用zookeeper做配置中心。

代码可以在SpringBoot组件化构建https://www.pomit.cn/java/spring/springcloud.html中的ZkConfig组件中查看,并下载。

ZkConfig组件中同时使用了服务注册发现,和博文中的代码略有不同,但原理是一样的,代码都已经过验证。

**如果大家正在寻找一个java的学习环境,或者在开发中遇到困难,可以<a

href="https://jq.qq.com/?_wv=1027&k=52sgH1J"

target="_blank">

加入我们的java学习圈,点击即可加入

</a>

,共同学习,节约学习时间,减少很多在学习中遇到的难题。**

二、项目配置

首先需要安装zookeeper,如果没有安装过,可以参考《Web基础配置篇(十一): Zookeeper的安装配置及使用》。 建议安装里面讲的安装zkui可视化工具,方便进行测试。

2.1 引入依赖

需要引入spring-boot-starter-web和spring-cloud-starter-zookeeper-config.

spring-cloud-starter-zookeeper-config默认引入的zookeeper是3.5的版本,因此如果你安装的zookeeper是3.4的版本,就必须排除zookeeper的依赖,并引入3.4的版本。

依赖如下:

代码语言:javascript
复制
<?xml version="1.0"?>
<project
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
	xmlns="http://maven.apache.org/POM/4.0.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>cn.pomit</groupId>
		<artifactId>springcloudwork</artifactId>
		<version>0.0.1-SNAPSHOT</version>
	</parent>
	<artifactId>ZkConfig</artifactId>
	<name>ZkConfig</name>
	<url>http://maven.apache.org</url>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>
		<maven-jar-plugin.version>2.6</maven-jar-plugin.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.apache.zookeeper</groupId>
			<artifactId>zookeeper</artifactId>
			<version>3.4.14</version>
			<exclusions>
				<exclusion>
					<groupId>org.slf4j</groupId>
					<artifactId>slf4j-log4j12</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-zookeeper-config</artifactId>
		</dependency>
	</dependencies>
</project>

父模块pom文件可以在https://www.pomit.cn/spring/SpringCloudWork/pom.xml获取。

2.2 配置文件

这里使用yaml文件写配置,配置文件分为两个,bootstrap.yml和application.yml:

  • bootstrap.yml的优先级高于application.yml。
  • 配置中心的相关配置必须放在bootstrap.yml中,否则无效。

bootstrap.yml:

代码语言:javascript
复制
server:
   port: 8816
   
spring:
   application:
      name: zkConfig
   profiles:
      active: dev
   cloud:
      zookeeper:
         connect-string: localhost:2181
         config:
            enabled: true
            root: config
            profileSeparator: ','

这里面,包含了端口、应用名、consul配置中心信息。

spring.application.name是标识了应用名。

spring.profiles.active 是激活的环境,你可以不写对应的配置文件,但这个配置必须有,是zookeeper配置中心路径的一部分。

spring.cloud.zookeeper.connect-string是zookeeper服务器地址。

spring.cloud.zookeeper.config.enabled开启配置中心功能。

spring.cloud.zookeeper.config.root是zookeeper的配置路径根目录。

spring.cloud.zookeeper.config.profileSeparator是profile和应用名直接的分隔符。

在这里插入图片描述

比如我这里写了个welcom.value配置。路径是config下的zkConfig,dev 下的welcom.value。

application.yml:

代码语言:javascript
复制

application.yml中仍可以配置一些常用配置,我这里啥都没写。

三、测试配置管理

3.1 zookeeper上做配置

上面配置的welcom.value,是通过zkui的import导入的文件。

文件内容如下:

代码语言:javascript
复制
/config/zkConfig,dev=welcom.value=test224233
3.2 启动类

启动类就是普通的Springboot启动,无需其他注解。

ZkConfigApplication :

代码语言:javascript
复制
package cn.pomit.springbootwork.zkconfig;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class ZkConfigApplication {
	public static void main(String[] args) {
		SpringApplication.run(ZkConfigApplication.class, args);
	}
}
3.3 测试配置变更逻辑

我们使用@Value("${welcom.value}")来注入3.1中配置的welcom.value属性。并在类上加@RefreshScope注解。

  • 我们可以将welcom.value属性写入配置文件中,但要注意,配置中心的配置优先级高于本地配置文件
  • 如果本地配置文件不存在,配置中心也没有,启动会报错的
  • 注意,需要变更配置的类上,要加@RefreshScope注解,否则不会刷新配置。
  • 通过接口查询当前的welcom.value值,zookeeper变更配置以后,接口能立即查到变更后的值。

ConfigInfoService :

代码语言:javascript
复制
package cn.pomit.springbootwork.zkconfig.service;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.stereotype.Service;

@RefreshScope
@Service
public class ConfigInfoService {

	@Value("${welcom.value}")
	private String welcomValue;

	public String testValue() {
		System.out.println(welcomValue);

		return welcomValue;
	}

	public String getWelcomValue() {
		return welcomValue;
	}

	public void setWelcomValue(String welcomValue) {
		this.welcomValue = welcomValue;
	}

}
3.4 测试Web

ZkConfigRest :

代码语言:javascript
复制
package cn.pomit.springbootwork.zkconfig.web;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import cn.pomit.springbootwork.zkconfig.model.ResultModel;
import cn.pomit.springbootwork.zkconfig.service.ConfigInfoService;

@RestController
@RequestMapping("/zkConfigApi")
public class ZkConfigRest {
	@Autowired
	ConfigInfoService configInfoService;

	@RequestMapping(value = "/value", method = { RequestMethod.GET })
	public ResultModel value() {
		return ResultModel.ok(configInfoService.testValue());
	}
}

四、过程中用到的实体

过程中用到了ResultModel实体,是和上一篇中的实体对应的,作为统一的实体来用。

ResultModel:

代码语言:javascript
复制
package cn.pomit.springbootwork.zkconfig.model;

/**
 * @author cff
 */
public class ResultModel {

	private String errorCode;
	private String message;
	private Object data;

	public ResultModel() {

	}

	public ResultModel(String errorCode, String message) {
		this.errorCode = errorCode;
		this.message = message;
	}

	public ResultModel(String errorCode, String message, Object data) {
		this.errorCode = errorCode;
		this.message = message;
		this.data = data;
	}

	public String geterrorCode() {
		return errorCode;
	}

	public void seterrorCode(String errorCode) {
		this.errorCode = errorCode;
	}

	public String getMessage() {
		return message;
	}

	public void setMessage(String message) {
		this.message = message;
	}

	public Object getData() {
		return data;
	}

	public void setData(Object data) {
		this.data = data;
	}

	public static ResultModel ok() {
		return new ResultModel("0000","成功");
	}

	public static ResultModel ok(Object data) {
		return new ResultModel("0000","成功", data);
	}

	public static ResultModel error() {
		return new ResultModel("1111","失败");
	}

	public static ResultModel error(String msg) {
		return new ResultModel("1111","失败", msg);
	}

	public static ResultModel error(String msg, Object data) {
		return new ResultModel("1111", msg, data);
	}
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/08/22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • SpringCloud技术指南系列(九)配置管理之Zookeeper配置中心
  • 一、概述
  • 二、项目配置
    • 2.1 引入依赖
      • 2.2 配置文件
      • 三、测试配置管理
        • 3.1 zookeeper上做配置
          • 3.2 启动类
            • 3.3 测试配置变更逻辑
              • 3.4 测试Web
              • 四、过程中用到的实体
              相关产品与服务
              微服务引擎 TSE
              微服务引擎(Tencent Cloud Service Engine)提供开箱即用的云上全场景微服务解决方案。支持开源增强的云原生注册配置中心(Zookeeper、Nacos 和 Apollo),北极星网格(腾讯自研并开源的 PolarisMesh)、云原生 API 网关(Kong)以及微服务应用托管的弹性微服务平台。微服务引擎完全兼容开源版本的使用方式,在功能、可用性和可运维性等多个方面进行增强。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档