Spring Cloud实战(一)-Spring Cloud Config Server

6

概要

  • 什么是Spring Cloud Config?

  • 创建并运行一个Spring Cloud Config Server

  • 建立一个Repository

  • 创建并运行一个Spring Cloud Config Client

Spring Cloud Config是什么?

什么是配置信息?
一个Application中不只是代码,还需要连接资源和其它应用,经常有很多需要外部设置的项去调整Application行为,如切换不同的数据库,i18n国际化 等.应用中的会经常见到的xml,properties,yaml等就是配置信息.

常见的实现信息配置的方法:

  • 硬编码(缺点:需要修改代码,风险大)

  • 放在xml等配置文件中,和应用一起打包(缺点:需要重新打包和重启)

  • 文件系统中(缺点:依赖操作系统等)

  • 环境变量(缺点:有大量的配置需要人工设置到环境变量中,不便于管理,且依赖平台)

  • 云端存储(缺点:与其他应用耦合)
    Spring Cloud Config 就是云端存储配置信息的,它具有中心化,版本控制,支持动态更新,平台独立,语言独立等特性.

图片描述
Spring Cloud Config的原理如图所示,真正的数据存在Git等repository中,Config Server去获取相应的信息,然后开发给Client Application,相互间的通信基于HTTP,TCP,UDP等协议.

创建并运行一个Spring Cloud Config Server

1.创建一个名为my-config-server的应用,并添加spring-cloud-starter-parent,spring-cloud-config-server依赖,pom信息具体如下

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.springframework.cloud</groupId>
         <artifactId>spring-cloud-starter-parent</artifactId>
        <version>Brixton.SR4</version>
        <relativePath/>
    </parent>

    <groupId>org.mmb.cloud</groupId>
    <artifactId>mmb-config-server</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-server</artifactId>
        </dependency>

    </dependencies>


</project>

2.在Application主类上添加@EnableConfigServer注解,具体如下

package config;

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

/**
 * Created by mmb on 2016/7/30.
 */
@EnableConfigServer
@SpringBootApplication
public class MMBConfigServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(MMBConfigServerApplication.class, args);
    }
}

3.去自己的GitHub上创建一个repository命名=MMBConfigData,并创建一个mmb-config-client.yml的配置文件,并添加一个key为luck-word,value mmb,或者其它任何值.具体如下

---
lucky-word: mmb

4.回自己的工程,设置应用application.yml,配置spring.cloud.config.server.git.uri为"https://github.com/"YOUR-GITHUB-ID"/"YOUR-REPOSITORY-NAME"",并设置端口server.port为8001

server:
  port: 8001

spring:
  cloud:
    config:
      server:
        git:
          uri: https://github.com/mumubin/MMBConfigData
          searchPaths: data

5.启动应用并打开地址http://localhost:8001/mmb-con...将会看到配置好的信息,我的如下

{
    "name": "mmb-config-client",
    "profiles": [
        "default"
    ],
    "label": "master",
    "version": "4d9240f45fecd34136f81683d44c2e144792af86",
    "propertySources": [
        {
            "name": "https://github.com/mumubin/MMBConfigData/data/mmb-config-client.yml",
            "source": {
                "lucky-word": "mmb"
            }
        }
    ]
}

创建并运行一个Spring Cloud Config Client

1.创建一个名为my-config-client的应用,并添加spring-cloud-starter-parent,spring-cloud-starter-config,spring-boot-starter-web依赖,pom信息具体如下

<?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 http://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>1.3.5.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-parent</artifactId>
                <version>Brixton.SR4</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <dependencies>
        <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>
        <!-- Allow for automatic restarts when classpath contents change. -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
        </dependency>
    </dependencies>

    <groupId>org.mmb.cloud</groupId>
    <artifactId>mmb-config-client</artifactId>
    <version>1.0-SNAPSHOT</version>

</project>

2.创建bootstrap.yml在resource下,并设置spring.application.name,spring.cloud.config.uri,server.port信息,具体如下

spring:
  application:
    name: mmb-config-client
  cloud:
    config:
      uri:  http://localhost:8001

---
server:
  port: 8002

注意这里是bootstrap.yml而不是appliction.yml,因为bootstrap.yml会在应用启动之前读取,而spring.cloud.config.uri会影响应用启动

3.创建一个Controller

 @RestController
    public class LuckyWordController {
 
      @Value("${lucky-word}") String luckyWord;
  
      @RequestMapping("/lucky-word")
      public String showLuckyWord() {
        return "The lucky word is: " + luckyWord;
      }
    }

4.启动Application,打开http://localhost:8002/lucky-word

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class,args);
    }
}
The lucky word is: mmb

特别感谢 kennyk65
Spring Cloud 中文用户组 31777218
Spring-Cloud-Config 官方文档-中文译本
Spring Cloud Netflix 官网文档-中文译本
本文实例github地址 Config Server Config Client

你可能感兴趣的

13 条评论
change · 2016年12月05日

源码在哪里

+1 回复

0

照着做就好,没几行原代码。可以用STS,创建spring-starter项目

ccfish · 2017年04月13日
1

文章最后都有github地址的

mumubin 作者 · 2017年06月11日
jesseling · 2017年05月31日

Spring-Cloud-Config 官方文档-中文译本
Spring Cloud Netflix 官网文档-中文译本
这二个链接是反的。

回复

1

谢,已修复

mumubin 作者 · 2017年06月11日
dbbx · 2017年08月28日

客户端启动报错,Could not resolve placeholder 'lucky-word' in string value "${lucky-word}",服务端没有问题

回复

0

一年前写的,忘得差不多了,git上的源码可以下载对比.不过这个提示应该是properties或者yaml里的配置文件中的luck-work没配置.建议先学习Spring再学习分布式框架不然你会很痛苦,建议先看看SpringBoot cookbook

mumubin 作者 · 2017年08月29日
0

@mumubin 多谢楼主回复,springboot 我已经看过了,麻烦提供下源码的git 地址

dbbx · 2017年08月29日
0

{"name":"mmb-config-client","profiles":["default"],"label":"master","version":"540eff15f091995975bf7d4c64b5a01ea2ce147d","propertySources":[{"name":"https://gitee.com/snbz/MMBConfigData.git/data/mmb-config-client.yml","source":{"document":"lucky-word:mmb"}},{"name":"https://gitee.com/snbz/MMBConfigData.git/mmb-config-client.yml","source":{"document":"lucky-word:mmb"}}]} 这是服务端的信息

dbbx · 2017年08月29日
renjl · 2017年11月27日

https://github.com/mumubin/MM... 这个地址是不能下载的不知道博主是如何启动项目的?

回复

iken · 2018年01月12日

如果没有IDE,只有jdk和jre能生成以上Config Server吗?

回复

载入中...