分布式配置中心(Spring Cloud Config)之快速入门

配置中心(Config Service)

新建spring boot项目,命名为config-server,修改pom.xml文件

<?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>

   <groupId>com.config</groupId>
   <artifactId>config-service</artifactId>
   <version>0.0.1-SNAPSHOT</version>
   <packaging>jar</packaging>

   <name>config-service</name>
   <description>Demo project for Spring Boot</description>

   <parent>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-parent</artifactId>
      <version>1.5.2.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>
   </properties>

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

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

      <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>
<!--配置注册中心-->
        <dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-eureka</artifactId>
		</dependency>

   </dependencies>

   <build>
      <plugins>
         <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
         </plugin>
      </plugins>
   </build>
</project>

 

启动类添加@EnableConfigServer注解。@EnableDiscoveryClient 配置注册中心

然后配置文件

spring.application.name=config-service
server.port=7001
spring.cloud.config.server.git.uri=https://gitee.com/heqiang917/SpringCloud/
spring.cloud.config.server.git.search-paths=/**
spring.cloud.config.server.git.username=heqiang917
spring.cloud.config.server.git.password=********
#配置注册中心
eureka.client.serviceUrl.defaultZone=http://127.0.0.1:8000/eureka/
eureka.instance.preferIpAddress=true

spring.cloud.config.server.git.uri:是git上的地址,这是存放配置文件的一个项目。

spring.cloud.config.server.git.search-paths:这是配置文件项目的一个搜索范围,你也可以指定一个或者多个文件夹

后面username和password就不多说了,你的git仓库的登录账号和密码。我用的是码云,

在配置这个配置文件前,我们需要在git仓库上新建几个文件,用于测试我们的config-server项目能否从git仓库上获取仓库上的文件和内容。

比如我在码云上新建了一个SpringCloud的项目,然后在里面新建了文件夹,在文件夹里新建了几个文件

 文件里内容自己随便写吧,就像我们一般配置文件一样写成key=value形式就行。

然后启动我们的config-server项目,在浏览器上输入http://127.0.0.1:7001/heqiang917/dev/config-lable-test/

 如果出现有dev的内容,也有默认的内容,说明是成功的,如果只有默认配置文件内容,到处是说没配置好,我没找打原因,,当我想查看heqiangspace一系列的文件时,怎么弄显示的都是默认的内容,就是说查看dev下的内容但是显示还是heqiangspace.properties的内容,不知道什么原因,有知道的麻烦留言解释下,小弟初学,写下来纯属记笔记,不是教程。

 

客户端配置映射(config-client)

同样新建项目,名字是config-client,pom.xml文件、

<?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>

   <groupId>com.client</groupId>
   <artifactId>config-client</artifactId>
   <version>0.0.1-SNAPSHOT</version>
   <packaging>jar</packaging>

   <name>config-client</name>
   <description>Demo project for Spring Boot</description>

   <parent>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-parent</artifactId>
      <version>1.5.2.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>
   </properties>

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

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

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

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

       <dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-eureka</artifactId>
		</dependency>

		<!--失败重试-->
		<dependency>
			<groupId>org.springframework.retry</groupId>
			<artifactId>spring-retry</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-aop</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>
   </dependencies>

   <build>
      <plugins>
         <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
         </plugin>
      </plugins>
   </build>


</project>

 

启动类添加@EnableDiscoveryClient注册中心的注解

新建一个bootstrap.properties文件 

spring.application.name=heqiang917
#spring.cloud.config.profile=dev
#spring.cloud.config.label=config-lable-test
#spring.cloud.config.uri=http://127.0.0.1:7001/

server.port=7002

#配置注册中心
eureka.client.serviceUrl.defaultZone=http://127.0.0.1:8000/eureka/
eureka.instance.preferIpAddress=true
spring.cloud.config.discovery.enabled=true
spring.cloud.config.discovery.serviceId=config-service
spring.cloud.config.profile=dev

#快速失败策略
spring.cloud.config.failFast=true

为什么是bootstrap文件呢,书上说的是大概因为这是因为SpringBoot对配置文件的加载顺序,这是要让server加载到。

然后写一个测试接口吧

package com.client;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * Created by qhe on 2018/8/2.
 */

@RefreshScope
@RestController
public class TestController {

    @Value("${from}")
    private String from;

    @RequestMapping("/from")
    public String from(){
        return this.from;
    }
}

然后浏览器访问http://127.0.0.1:7002/from,这样就能通过server获取git上的配置文件内容了,

然后问题来了,我这里其实是错的显示。正确的应该返回dev.test,因为我获取的是test分支下的dev环境的配置文件,里面的内容时dev.test,但是我怎么弄都返回不了,返回的都是默认配置文件里的dev。如有人看到求告知原因,万分感谢。

(个人找了下,发现,每次启动ConfigServer都会从Git 上git clone一次配置文件,并后面跟随一个随机码,这是起到缓存作用,以防止git连不上的时候还可以从本地获取,但是这样就可能会因为缓存而无法实时刷新,个人建议每次启动前删除原先的本地配置文件)

 

有两点注意:1,客户端应用在获得外部配置文件后加载到客户端的ApplicationContext实例中,该配置优先级会高于jar包配置内容,所以Jar包中重复的内容不会再被加载

2,Config server巧妙的通过git clone将配置信息存于本地,起到缓存的作用,即便git连不上,也能读取本地的文件内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值