`

Spring Cloud Config 分布式配置中心使用

阅读更多

一、简介

为了方便统一管理配置文件管理,使用spring cloud config作为分布式配置中心,国产比较好的有百度的disconf,携程的apollo,这里我们介绍使用spring cloud config。它支持配置服务放在配置服务的内存中(即本地),也支持放在远程Git、SVN等仓库中。在spring cloud config 组件中,分两个角色,一是config server,二是config client。

 

二、创建Config Server

 

创建一个spring-cloud项目,取名为config-server,支持maven和gradle,这里配置中心使用svn远程库上的配置:

1.maven的pom.xml中引入依赖:

 

 <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>
	<groupId>config-server</groupId>
	<artifactId>config-server</artifactId>
	<packaging>jar</packaging>
	<name>dmw-config</name>
	<description>配置中心</description>
        <!--使用最新版的spring-boot ->
	 <parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.5.10.RELEASE</version>
		<relativePath /> <!-- lookup parent from repository -->
	</parent>
	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>
		<spring-cloud.version>Edgware.SR1</spring-cloud.version>
	</properties>


	<dependencies>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-config-server</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
			<exclusions>
				<exclusion>
					<groupId>org.springframework.boot</groupId>
					<artifactId>spring-boot-starter-tomcat</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.tmatesoft.svnkit</groupId>
			<artifactId>svnkit</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-undertow</artifactId>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-eureka</artifactId>
		</dependency>
	</dependencies>
   <!--依赖管理,用于管理spring-cloud的依赖,其中Edgware.SR1是版本号-->
	<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>
		<finalName>dmw-config</finalName>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>
</project>
 

 2.gradle build.gradle依赖:

buildscript {
	ext {
		springBootVersion = '1.5.10.RELEASE'
	}
	repositories {
		mavenCentral()
	}
	dependencies {
		classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
	}
}

apply plugin: 'java'
apply plugin: 'eclipse-wtp'
apply plugin: 'org.springframework.boot'

group = 'com.config'
version = ''
sourceCompatibility = 1.8

repositories {
    maven {url 'http://maven.aliyun.com/nexus/content/groups/public/'}
	mavenCentral()
}

configurations {
	providedRuntime
}

ext {
	springCloudVersion = 'Edgware.SR1'
	if(!project.hasProperty("profile")){
		profile='test'
	}
}
sourceSets {
	main {
		resources {
			srcDir "env/${profile}"
		}
	}
}
dependencies {
	compile('org.springframework.cloud:spring-cloud-config-server'){
	 exclude module: 'spring-boot-starter-tomcat'
	}
	compile('org.springframework.cloud:spring-cloud-starter-eureka')
	runtime('org.springframework.boot:spring-boot-starter-undertow')
	testCompile('org.springframework.boot:spring-boot-starter-test')
	compile('org.tmatesoft.svnkit:svnkit')
	compile('org.springframework.boot:spring-boot-starter-actuator')
}

dependencyManagement {
	imports {
		mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
	}
}

 

新建入口类BootApplication:

 

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


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

 

 

spring:
  profiles:
    #使用svn这里必须指定为subversion,否则会报错,因为config默认配置的git
    active: subversion
  cloud:
    config:
      server:
        svn:
          # 配置svn仓库地址
          uri: svn://192.168.1.1/config-repo
          # 配置svn访问账号
          username: test
          # 配置svn访问密码
          password: test
          #配置svn项目配置文件所在目录
          default-label: profiles
 服务端完成,如果在svn上的config-repo的profiel目录下有一个application-dev.yml配置文件,则可以通过http://loalhost:8080/application-dev.yml访问获得配置信息,该项目没有指定端口,所以默认8080,

 

 

三、构建Config Client

重新创建一个springboot项目,取名为config-client

 1.maven 的pom文件引入依赖:

<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</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-actuator</artifactId>
        </dependency>

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

 2. gradle gruadle.build

buildscript {
	ext {
		springBootVersion = '1.5.10.RELEASE'
	}
	repositories {
		mavenCentral()
	}
	dependencies {
		classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
	}
}

apply plugin: 'java'
apply plugin: 'eclipse-wtp'
apply plugin: 'org.springframework.boot'
apply plugin: 'war'

group = 'com.config'
version = ''
sourceCompatibility = 1.8

repositories {
    maven {url 'http://maven.aliyun.com/nexus/content/groups/public/'}
	mavenCentral()
}

configurations {
	providedRuntime
}
ext{
    springCloudVersion = 'Edgware.SR1'
	if(!project.hasProperty("profile")){
		profile='demo'
	}
}

sourceSets {
	main {
		resources {
			srcDir "profiles/${profile}"
		}
	}
}
dependencies {
	compile('org.springframework.boot:spring-boot-starter-actuator')
	compile('org.springframework.boot:spring-boot-starter-web')
	compile('org.springframework.cloud:spring-cloud-config-client')
	providedRuntime('org.springframework.boot:spring-boot-starter-tomcat')
	testCompile('org.springframework.boot:spring-boot-starter-test')
}
dependencyManagement {
	imports {
		mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
	}
}

 其配置文件bootstrap.yml

spring:
  profiles:
    active: dev
  application:
    name: config-client
  cloud:
    config:
      enabled: true
      profile: ${spring.profiles.active}
      uri: http://${spring.cloud.client.ipAddress}:8080
     #如果config-server配置了账号跟密码
      username: test
      password: test
     #重试机制
      fail-fast: true
      retry:
        initial-interval: 2000
        max-interval: 10000
        multiplier: 2
        max-attempts: 10

程序的入口类,写一个API接口“/hello”,返回从如果配置中心的有foo变量的值,则可以获取,代码如下:

 

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;


@SpringBootApplication
@RestController
public class ConfigClientApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConfigClientApplication .class, args);
    }
    
    @Value("${foo}") // svn配置文件里的key
    String foo;
    
    @RequestMapping(value = "/hello")
    public String hi(){
        return foo;
    }
    
}

 

 

 

 

分享到:
评论

相关推荐

    SpringCloud——分布式配置中心(Spring Cloud Config)

    在微服务架构中,Spring Cloud Config 是一个强大的分布式配置中心,它允许开发人员将应用程序的配置存储在远程仓库中,并且可以在运行时动态地管理和更新这些配置,无需重启应用。这个特性对于大型分布式系统来说...

    SpringCloud config分布式配置中心.zip

    spring-cloud-config是用来集中管理分布式的配置问题,不同环境不同配置,动态化的配置更新,分环境部署比如dev/test/prod/beta/release,运行期间动态调整配置,不再需要在每个服务部署的机器上编写配置文件,服务...

    SpringCloud之七 分布式配置中心SpringCloudConfig.pdf

    Spring Cloud Config是Spring Cloud全家桶中的一个组件,它主要用于实现分布式系统中的配置管理。在微服务架构下,系统通常被拆分成许多个小的微服务,每个服务都有自己的配置文件。当配置文件频繁更改或不同服务...

    SpringCloud微服务、链路跟踪、分布式配置、分布式网关

    6. **分布式配置**:SpringCloud Config是SpringCloud提供的分布式配置服务器,它支持配置的集中化存储和版本控制,使得开发者可以在不重启服务的情况下更新配置,提高了运维效率。Config Server可以与Git仓库集成,...

    SpringCloud Config Demo编写

    2.服务端为分布式配置中心,是一个独立的微服务应用;客户端为分布式系统中的基础设置或微服务应用,通过指定配置中心来管理相关的配置。 3.Spring Cloud Config 默认采用 Git 存储配置信息,天然支持对配置信息的...

    Spring Cloud之Config分布式配置应⽤

    Spring Cloud Config 是一个用于在分布式系统中管理外部配置的工具,它支持服务发现和集中式配置。这个框架允许你集中存储、管理和版本化你的应用配置,使得开发人员可以在不重启应用的情况下更新配置。本文将深入...

    尚硅谷SpringCloud第2季2020版.mmap

    SpringCloud Config 分布式配置中心 SpringCloud Bus 消息总线 SpringCloud Stream 消息驱动 SpringCloud Sleuth 分布式请求链路跟踪 SpringCloud Alibaba入门简介 SpringCloud Alibaba Nacos 服务注册和配置...

    spring cloud config分布式配置中心的高可用问题

    Spring Cloud Config 分布式配置中心的高可用问题解决方案 在之前的文章中,我们实现了配置文件统一管理的功能,但是在实现的过程中,我们仅仅使用了一个 Server,如果这个 Server 挂掉的话,整个配置中心就会不...

    spring boot+Spring cloud微服务分布式源码.zip

    5. **配置管理**:Spring Cloud Config 提供集中式的配置管理,服务可以根据需要动态获取或更新配置。 6. **调用链跟踪**:Zipkin 或 Sleuth 可以帮助我们追踪跨服务的请求,对问题定位提供强有力的支持。 7. **...

    spring cloud config

    Spring Cloud Config 是一个用于微服务架构中的外部配置中心,它允许开发者在运行时管理应用程序的配置。这个框架基于Git或Subversion等版本控制系统,提供了一种集中化、动态化的配置方式,使得微服务可以从中央...

    springcloud入门代码基于Spring Cloud实现的分布式配置中心源代码

    在深入研究源代码`springcloud-chapter07-master`时,你可以学习到如何设置Config Server和Config Client,以及如何在微服务之间进行通信以获取配置。这将涉及到Spring Boot的启动类配置、Spring Cloud的相关依赖、...

    06_SpringCloud Config 配置中心.md

    springcloud config分布式配置中心,需要注意gitee上创建的文件格式,特别注意不然 config client启动的时候就会报错误 说@value("${name}")的值找不到

    SpringCloud微服务分布式架构开发实战-50000-05-作业及参考答案.rar.rar

    在分布式配置方面,SpringCloud Config提供了一个集中式的配置服务器,允许我们在运行时更新应用程序的配置,无需重启服务。此外,SpringCloud Bus可以将配置更改实时推送到所有相关服务,确保一致性。 接下来,...

    《深入理解Spring Cloud与微服务构建》学习笔记(二十)~配置中心Spring Cloud Config

    在本篇学习笔记中,我们将深入探讨Spring Cloud Config——一个强大的配置管理工具,它使得在分布式系统中管理和分发配置变得简单。Spring Cloud Config支持服务器端和客户端两种组件,允许我们在开发过程中动态地...

    基于springcloud的分布式网上商城系统源码.zip

    SpringCloud是基于Spring Boot的微服务开发工具集,它为开发者提供了在分布式系统(如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话、集群状态)中快速构建...

    spring cloud config client 服务配置中心 客户端

    - 客户端是Spring Cloud Config的使用者,每个需要使用配置的微服务都会包含Config Client。 - 客户端通过HTTP API与Config Server通信,获取当前环境下的配置信息。 - 当客户端启动时,会自动向Config Server...

    26-Spring Cloud分布式配置中心Config1

    Spring Cloud分布式配置中心Config是微服务架构中解决多环境配置管理的一个重要工具。在传统的开发过程中,不同环境(如开发、测试、生产)的配置管理往往由开发人员手动处理,或者通过复杂的流程来确保配置的正确性...

    SpringCloud之分布式配置中心Spring Cloud Config高可用配置实例代码

    Spring Cloud Config是Spring Cloud中的配置中心模块,用于管理应用程序的配置信息。在生产环境中部署配置中心时,我们需要确保它是一个高可用的应用。Spring Cloud Config提供了两种方式来实现服务端的高可用:传统...

    07_SpringCloud-zuul整合分布式中心动态修改路由规则.md

    结合前面我们把路由规则写在项目的配置文件中.现在把结合SpringCloud-config 分布式配置中心,让配置文件更加的灵活。使用actuator 手动刷新,后面在说springcloud 消息总线 实现动态刷新配置。

    springcloud config配置中心

    综上所述,Spring Cloud Config 是微服务架构中不可或缺的一部分,它极大地简化了分布式系统中配置管理的复杂性,提高了系统的灵活性和可维护性。通过使用这个工具,我们可以更好地实现配置的集中管理和动态更新,...

Global site tag (gtag.js) - Google Analytics