专栏首页会跳舞的机器人Spring Cloud(4)——分布式配置中心

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

一、简介

Spring Cloud Config是一个配置管理工具包,让你可以把配置放到远程服务器,集中化管理集群配置,目前支持本地存储、Git以及Subversion。 Spring Cloud Config分为两部分

  • config-server:配置服务端,负责管理配置信息
  • config-client:配置客户端,通过调用server端暴露的接口来换取配置信息

二、项目实例

创建maven工程microservice-config-server

1、在pom.xml中加入以下依赖

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.4.4.RELEASE</version>
  </parent>

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

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

  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-dependencies</artifactId>
        <version>Camden.SR5</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>

2、创建ConfigServerApplication.java

package com.baibei.config.server;

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

/**
 * @author: 会跳舞的机器人
 * @email:2268549298@qq.com
 * @date: 17/2/19 下午2:35
 * @description:分布式配置中心启动主类
 */
@SpringBootApplication
@EnableConfigServer
public class ConfigServerApplication {

    public static void main(String[] args) {
        SpringApplication.run(ConfigServerApplication.class, args);
    }
}

添加@EnableConfigServer注解开启Config Server

3、在resource文件夹下创建application.properties文件

#config-server对外提供的端口
server.port=9001

#git repo的url地址
spring.cloud.config.server.git.uri=https://git.oschina.net/dreyer/microservice-config-repo.git
#指定搜索路径,config-server会自动搜索根目录和指定目录(逗号分隔)下的文件
spring.cloud.config.server.git.searchPaths=api,backend
#有读取权限的git用户
spring.cloud.config.server.git.username=username
#git用户密码
spring.cloud.config.server.git.password=password

4、服务端验证

为了完成服务端的验证,我们需要在git上创建一个项目作为配置仓库,目录结构如下:

. ├── api │ ├── business-dev.properties │ ├── business-prod.properties │ └── business-test.properties ├── exchange │ ├── business-dev.properties │ ├── business-prod.properties │ └── business-test.properties ├── component-dev.properties ├── component-prod.properties ├── component-test.properties ├── database-dev.properties ├── database-prod.properties ├── database-test.properties 接下来,我们就可以通过URL来访问到我们配置的内容了。 例如我们可以通过 **URL与配置文件的映射关系如下:** - /{application}/{profile}[/{label}] 如: http://localhost:9001/database/dev - /{application}-{profile}.yml 如: http://localhost:9001/database-dev.yml - /{label}/{application}-{profile}.yml 如: http://localhost:9001/f-branch/database-dev.yml (f-branch分支下的database-dev.yml文件) - /{application}-{profile}.properties 如: http://localhost:9001/database-dev.properties (**不指定分支默认是MASTER分支**) - /{label}/{application}-{profile}.properties 如: http://localhost:9001/f-branch/database-dev.properties 例如database-dev.properties 对应{application}-{profile}.properties, {application} 就是 database, {profile}就是dev。 {label}对应git上不同的分支,默认为master。 ### 5.使用本地配置 开发人员在本机进行开发时,可能会用到自已本地的一些配置信息,如果把这些配置提交至git上的话,又会影响到其他同事的开发,那么在这种场景下,开发人员是可以选择使用本地配置,而不是git上的配置信息的,做法也很简单,只需要在config-server的application.properties中添加spring.profiles.active=native,然后把相关的配置文件放在src/main/resource下即可 ### 6、配置中心客户端 以 [Spring Cloud(2)—服务提供者](http://www.jianshu.com/p/ff8db428d365) 中的microservice-provider-user作为配置中心客户端 #### 6.1. 在pom.xml中增加Config Server所需要的jar包

org.springframework.cloud spring-cloud-starter-config

#### 6.2. 创建bootstrap.properties来指定Config Server配置,内容如下:

spring.cloud.config.uri=http://localhost:9001/ spring.cloud.config.profile=dev spring.cloud.config.label=master spring.cloud.config.name=database,component,business

内容含义如下:
- spring.application.name:对应前配置文件中的{application}部分
- spring.cloud.config.profile:对应前配置文件中的{profile}部分
- spring.cloud.config.label:对应前配置文件的git分支
- spring.cloud.config.uri:配置中心的地址

以上工作完成后,在代码中我们就可以使用@Value注解来调用相关的配置信息,

@Value(“${datasource.url}”) private String dataSourceUrl;

配置中心完成之后,在microservice-provider-user工程的application.properties中的数据库配置就可以换为

spring.datasource.url=${datasource.url} spring.datasource.username=${datasource.username} spring.datasource.password=${datasource.password}

在配置中心客户端启动的时候,我们也可以看到相关的日志信息输出

2017-02-19 15:17:28.220 INFO 11206 — [ main] c.c.c.ConfigServicePropertySourceLocator : Fetching config from server at: http://localhost:9001/ 2017-02-19 15:17:29.565 INFO 11206 — [ main] c.c.c.ConfigServicePropertySourceLocator : Located environment: name=database,component,business, profiles=[dev], label=master, version=a9f8f18e682a03f4d7f046c754472f394313fa82, state=null 2017-02-19 15:17:29.565 INFO 11206 — [ main] b.c.PropertySourceBootstrapConfiguration : Located property source: CompositePropertySource [name=’configService’, propertySources=[MapPropertySource [name=’configClient’], MapPropertySource [name=’https://git.oschina.net/dreyer/microservice-config-repo.git/database-dev.properties‘]]] 2017-02-19 15:17:29.595 INFO 11206 — [ main] c.b.p.user.UserProviderApplication : No active profile set, falling back to default profiles: default ```

附项目目录截图:

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • java并发编程的艺术笔记第五章——java中的锁

    锁是用来控制多个线程访问共享资源的方式,一般来说锁能够防止多个线程同时访问共享资源(有的锁可以允许多个线程访问共享资源,比如说读写锁),在Lock接口出现之前,...

    会跳舞的机器人
  • Redis实现用户登录错误次数限制

    系统登录的时候经常会有这种场景,如果密码连续N次输入错误,则要等N分钟之后才能重试。实现的方式有多种,比如在内存中维护一个数据结构来存储这些信息,但实现起来比较...

    会跳舞的机器人
  • RSA非对称加密

    需要注意的一点,这个公钥和私钥必须是一对的,如果用公钥对数据进行加密,那么只有使用对应的私钥才能解密,所以只要私钥不泄露,那么我们的数据就是安全的。

    会跳舞的机器人
  • [置顶] 自建短连接 - 链接推广分析工具

        实现代码:以.net为例,开发工具VS2015,采用 MVC5.0 建站,代码直接上图: 1,添加路由: ? 2,记录日志,代码和日志截图 ? ...

    opengps
  • 从websocket看go的应用

    Go是互联网时代的通用编程语言。这样它就和命令行时代的C语言、图示界面时代的C++、以及互联网早期的Java语言等有不同的侧重。它强调保持自身的精巧和独立,从而...

    李海彬
  • 简书非官方大数据(二)

    PS:这条很重要,我的文章中所说的大数据并不是现在很火的大数据话题,前几天看过一篇大数据的文章,简单来说:当一台电脑没法处理或你现在的条件没法处理的数据就可以谈...

    罗罗攀
  • 从websocket看go的应用

    Go是互联网时代的通用编程语言。这样它就和命令行时代的C语言、图示界面时代的C++、以及互联网早期的Java语言等有不同的侧重。它强调保持自身的精巧和独立,从而...

    李海彬
  • 从websocket看go的应用

    Go是互联网时代的通用编程语言。这样它就和命令行时代的C语言、图示界面时代的C++、以及互联网早期的Java语言等有不同的侧重。它强调保持自身的精巧和独立,从而...

    李海彬
  • Python编程常见十大错误,搞事情

    使用python会出现各种各样的错误,以下是Python常见的错误以及解决方法。

    测试小兵
  • 编程小白 | 每日一练(73)

    这道理放在编程上也一并受用。在编程方面有着天赋异禀的人毕竟是少数,我们大多数人想要从编程小白进阶到高手,需要经历的是日积月累的学习,那么如何学习呢?当然是每天都...

    闫小林

扫码关注云+社区

领取腾讯云代金券