【SpringCloud】搭建高可用分布式配置中心(Spring Cloud Config)(一)全过程详解(手动刷新)Spring Cloud 2.0.2.RELEASE

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_42684642/article/details/86525407

由于网上资料大多数基于SpringBoot2.0以下版本搭建配置中心,而2.0版本以上的资料较小,因此基于SpringCloud2.0.2.RELEASE搭建了一个手动刷新的配置中心,在(二)全过程详解(自动刷新)WebHooks中将会讲解,该如何实现自动刷新配置。

话不多说,接下来就是如何实现。

一.新建Config-Respoity项目

我是在码云上建立的配置库,在github上也可以,任君选择,毕竟现在github也可以免费建立私有仓库了。

demo版本只需要建立一个仓库包含几个配置文件即可,也可以建立多个子目录进行存放。

config-client-dev.yml文件内容: profile: dev 

config-client文件内容 :profile: default

二.新建Config-Server项目

1.所需依赖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.xxx</groupId>
	<artifactId>configserver</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>config-server</name>

     <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.2.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
     </parent>

	<properties>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter</artifactId>
		</dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-server</artifactId>
            <version>2.0.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
            <version>2.0.2.RELEASE</version>
        </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>

2.其次需要在ConfigServerApplication类中添加注解

@EnableConfigServer  //表示为ConfigServer端

@EnableDiscoveryClient  //表示为Eureka客户端,Eurek服务端的搭建就不在详细描述了,不会的可以google下如何搭建

3.application.yml文件的配置:

spring:
  application:
    name: config-server
  cloud:
    config:
      server:
        git:
          uri: https://gitee.com/xxxx/spring-config-resp  #spring-config-resp仓库
          username: xxxx
          password: xxxx
server:
  port: 1234
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:8761/eureka/

4.运行

首先需要打开eureka server服务端,否则会报错,若没有的话可以自行删除@EnableDiscoveryClient及yml文件中的eureka配置。

在浏览器中或者postman工具中打开请求地址,请求地址格式可以为以下几种:

http://localhost:1234/config-client.yml 

http://localhost:1234/config-client-dev.yml

http://localhost:1234/config-client/dev

可以成功的看到config-server成功请求到配置文件。

三.搭建Config-Client项目

1.所需依赖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.xxx</groupId>
	<artifactId>config-client</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>config-client</name>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.2.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

	<properties>
		<java.version>1.8</java.version>
	</properties>

	<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-netflix-eureka-client</artifactId>
            <version>2.0.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-client</artifactId>
            <version>2.0.2.RELEASE</version>
        </dependency>
        <!--bootstrap.yml文件生效依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-context</artifactId>
            <version>2.0.2.RELEASE</version>
        </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>

2.bootstrap.yml配置文件:config需要配置bootstrap.yml文件,否则无法正常加载

spring:
  application:
    name: config-client
  cloud:
    config:
      profile: dev
      label: master
      uri: http://localhost:1234/   #config-server的地址
      discovery:
        enabled: true
        service-id: config-server
server:
  port: 1235
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:8761/eureka/
management:
  endpoints:
    web:
      exposure:
        include: "*"  #访问监控设置的端口

这里有几点需要特别注意:

1.springcloud2.0以上actuator已经不是全部对外开放了,需要配置,配置*表示所有的都可以通过

2.springcloud2.0以上的手动刷新地址变了 后缀为/actuator/refresh

3.ConfigClientApplication类中添加注解:@EnableDiscoveryClient

4.Controller层: TestController

@RestController
@RefreshScope //刷新
public class TestController {

    @Value("${profile}")
    private String from;//profile需要在config仓库的配置文件中有这个字段,不然会报错

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

}

5.启动项目。

(1)访问:http://localhost:1235/profile 查看配置

 (2)进行手动刷新

首先在码云上修改配置文件,config-client-dev.yml文件profile: 666

使用postmanf发起post请求,注意是post方式

请求地址:http://localhost:1235/actuator/refresh

再次打开http://localhost:1235/profile ,可以看到配置已经刷新了。

6.总结

在项目中仅仅是手动刷新是无法达到要求的,需要我们配置自动刷新,在接下来的(二)全过程详解(自动刷新)WebHooks 将会介绍如何最简单的搭建一个基于webhooks的自动刷新的配置中心。

 

猜你喜欢

转载自blog.csdn.net/qq_42684642/article/details/86525407