spring cloud Config 分布式配置中心

1,分布式配置中心是什么

微服务中,每个服务都需要配置对应的配置信息,由于应用被拆分为很多个微服务;会导致需要配置的文件和信息量很大,给运维带来很大的工作量,并且修改时,容易出错。分布式配置中心通过将配置信息在配置中心统一配置,减少维护工作量和出错率。

Spring Cloud Config 为微服务架构中的微服务提供集中化的、外部的 配置支持。Config Server为所有微服务的环境提供了一个集中的外部配置。

Spring Cloud Config分为服务端和客户端。

Server端就是配置中心,是一个独立的微服务,用来连接配置服务器(配置服务器默认为GIT),并负责加密、解密,为客户端提供获取配置信息的接口。

客户端则通过服务端来管理应用资源以及与业务相关的配置内容。在启动的时候,从服务端获取和加载配置信息。

如下图:

在这里插入图片描述

采用Spring Cloud Config 好处:

1,集中管理配置文件;

2,不同环境不同配置,开发、测试、beta、生产环境对应各自版本的配置;

3,运行期间动态调整配置;服务不需要重启即可感知到配置的变化并应用新的配置。

2,Config Server 实现

1,git库及文件准备:

根据自己的环境准备git库搭建;添加配置文件:

配置使用的application.yml文件。(实际使用中,这里定义需要的内容,在客户端配置类中通过config server接口获取内容,设置进配置类;这里只配置了数据库连接池druid相关。)

spring: 
  profiles:  
    active: 
      - dev
--- 
spring: 
  profiles: dev #开发环境 
  application: springcloud-config-dev 
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: org.gjt.mm.mysql.Driver
    url: jdbc:mysql://127.0.0.1:3306/mybatis
    username: root
    password: 123456
#连接池的配置信息
    initialSize: 5
    minIdle: 5
    maxActive: 20
    maxWait: 60000
    timeBetweenEvictionRunsMillis: 60000
    minEvictableIdleTimeMillis: 300000
    validationQuery: SELECT 1 FROM DUAL
    testWhileIdle: true
    testOnBorrow: false
    testOnReturn: false
    poolPreparedStatements: true
    filters: stat,log4j
    maxPoolPreparedStatementPerConnectionSize: 20
    useGlobalDataSourceStat: true
    connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
#连接池的配置信息
#spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000     
druid:
  servlet:
    username: appAdmin
    password: 111111
--- 
spring: 
  profiles: test #开发环境 
  application: springcloud-config-test
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: org.gjt.mm.mysql.Driver
    url: jdbc:mysql://127.0.0.1:3306/test
    username: root
    password: 123456
#连接池的配置信息
    initialSize: 5
    minIdle: 5
    maxActive: 20
    maxWait: 60000
    timeBetweenEvictionRunsMillis: 60000
    minEvictableIdleTimeMillis: 300000
    validationQuery: SELECT 1 FROM DUAL
    testWhileIdle: true
    testOnBorrow: false
    testOnReturn: false
    poolPreparedStatements: true
    filters: stat,log4j
    maxPoolPreparedStatementPerConnectionSize: 20
    useGlobalDataSourceStat: true
    connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
#连接池的配置信息
#spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000     
druid:
  servlet:
    username: appAdmin
    password: 111111

2,pom文件配置:

	<dependencies>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-config-server</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-actuator</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-hystrix</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-eureka</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-config</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-jetty</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
		</dependency>
	</dependencies>

3,应用启动类:

package com.mark.config.center;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;

@SpringBootApplication
@EnableConfigServer
public class ConfigApp
{
	public static void main(String[] args)
	{
		SpringApplication.run(ConfigApp.class, args);
	}
}

4,yaml配置:

server: 
  port: 3333 
  
spring:
  application:
    name:  microservicecloud-config
  cloud:
    config:
      server:
        git:
          uri: https://github.com/kongxinmark/spring-cloud-config/ #这里要注意,不同版本的spring cloud支持的uri的写法可能会有区别(本例中的父工程定义的spring-cloud-dependencies为:Dalston.SR2)
          default-label: master
management:
  security:
    enabled: false

5,启动,并检查是否正常启动

浏览器访问:http://127.0.0.1:3333/health

返回结果检查:

{
  status: "UP",
  diskSpace: {
    status: "UP",
    total: 104864092160,
    free: 11448885248,
    threshold: 10485760
  },
  refreshScope: {
    status: "UP"
  },
  configServer: {
    status: "UP",
    repositories: [
      {
        sources: [
        "https://github.com/kongxinmark/spring-cloud-config/application.yml"
        ],
        name: "app",
        profiles: [
        "default"
        ],
        label: null
      }
    ]
  }
}

3,Config 客户端 实现

1,在pom文件中添加config依赖:
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-config</artifactId>
		</dependency>
2,添加添加bootstrap.yml

bootstrap.yml高优先级,将从spring cloud config服务端获取配置信息。

如下:

spring:
  cloud:
    config:
      name: application #需要从github上读取的资源名称,注意没有yml后缀名
      profile: dev   #本次访问的配置项
      label: master   
      uri: http://127.0.0.1:3333  #springcloud server服务地址
3,删除掉原application.yml

bootstrap.yml高优先级,将从spring cloud config服务端获取配置信息。(本例中只删除了原本配置中的连接池druid配置相关)

4,其余全部保持不变。

运行检查,客户端已经通过server端获取到git库的配置信息。

3,总结

spring cloud config 分布式配置中心,可以将配置信息,集中管理起来,需要经过规划,哪些配置是可变的,可以通过git库方式管理起来,方便统一维护。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值