SpringCloud教程-分布式配置中心Config (SpringCloud版本Greenwich.SR4)


代码地址: github-spring-cloud地址

Config(分布式配置中心)简介

Spring Cloud Config项目是一个解决分布式系统的配置管理方案。它包含了Client和Server两个部分,server提供配置文件的存储、以接口的形式将配置文件的内容提供出去,client通过接口获取数据、并依据此数据初始化自己的应用。

创建服务端ConfigServer

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">
    <parent>
        <artifactId>spring-cloud-learn</artifactId>
        <groupId>com.sl.learn.cloud</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.sl.learn.cloud</groupId>
    <artifactId>config-server</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</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>
        <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-netflix-hystrix -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-server</artifactId>
        </dependency>

    </dependencies>


</project>

在程序的入口Application类加上@EnableConfigServer注解开启配置服务器的功能,代码如下:

@SpringBootApplication
@EnableConfigServer
@EnableDiscoveryClient
public class ConfigServerApplication {

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

配置文件application.properties文件配置以下

spring.application.name=config-server
server.port=8088
eureka.client.serviceUrl.defaultZone=http://localhost:8080/eureka/
spring.cloud.config.server.git.uri=https://github.com/FadeHub/SpringCloudConfig
spring.cloud.config.server.git.searchPaths=repo
spring.cloud.config.label=master
spring.cloud.config.username=
spring.cloud.config.password=

配置文件含义:

  • spring.cloud.config.server.git.uri:配置git仓库地址
  • spring.cloud.config.server.git.searchPaths:配置仓库路径
  • spring.cloud.config.label:配置仓库的分支
  • spring.cloud.config.server.git.username:访问git仓库的用户名
  • spring.cloud.config.server.git.password:访问git仓库的用户密码
  • eureka.client.serviceUrl.defaultZone:eureka地址

如果Git仓库为公开仓库,可以不填写用户名和密码,如果是私有仓库需要填写,本例子是公开仓库,放心使用。
远程仓库https://github.com/FadeHub/SpringCloudConfig中有个文件config-client-dev.properties文件中有一个属性:

helloConfig=123
eureka.client.serviceUrl.defaultZone=http://localhost:8080/eureka/

启动config-server访问链接:http://localhost:8088/helloConfig/dev

{“name”:“helloConfig”,“profiles”:[“dev”],“label”:null,“version”:“8138503a27a470d687d608b0fd4b7d169a23de5c”,“state”:null,“propertySources”:[]}

扫描二维码关注公众号,回复: 9855998 查看本文章

由此可见配置服务中心可以从远程程序获取配置信息

http请求地址和资源文件映射如下:

  • /{application}/{profile}[/{label}]
  • /{application}-{profile}.yml
  • /{label}/{application}-{profile}.yml
  • /{application}-{profile}.properties
  • /{label}/{application}-{profile}.properties

创建客户端config-client

config-client 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">
    <parent>
        <artifactId>spring-cloud-learn</artifactId>
        <groupId>com.sl.learn.cloud</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.sl.learn.cloud</groupId>
    <artifactId>config-client</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</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>
    <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-netflix-hystrix -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-config</artifactId>
    </dependency>
   </dependencies>
</project>

配置文件bootstrap.properties

spring.application.name=config-client
spring.cloud.config.label=master
spring.cloud.config.profile=dev
spring.cloud.config.uri=http://localhost:8088/
server.port=8098

配置文件含义解释:

  • spring.cloud.config.label: 指明远程仓库的分支

  • spring.cloud.config.profile:dev/test/pro
    dev开发环境配置文件
    test测试环境
    pro正式环境

  • spring.cloud.config.uri= http://localhost:8888/ (指明配置服务中心的网址)

启动程序ConfigClientApplication
写一个API接口“/hi”,返回从配置中心读取的helloConfig变量的值

@SpringBootApplication
@RestController
public class ConfigClientApplication {

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

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

    @RequestMapping(value = "/hi")
    public String helloConfig() {
        return helloConfig;
    }
}

启动config-client访问链接:http://localhost:8098/hi
在这里插入图片描述

这就说明,config-client从config-server获取了helloConfig的属性,而config-server是从git仓库读取的,如图:
在这里插入图片描述

发布了143 篇原创文章 · 获赞 13 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/TreeShu321/article/details/103446930