Spring Cloud Config

Spring Cloud Config为分布式系统中的外部配置提供服务器和客户端支持。使用Config Server,您可以在所有环境中管理应用程序的外部属性。客户端和服务器上的概念映射与Spring EnvironmentPropertySource抽象相同,因此它们与Spring应用程序非常契合,但可以与任何以任何语言运行的应用程序一起使用。随着应用程序通过从开发人员到测试和生产的部署流程,您可以管理这些环境之间的配置,并确定应用程序具有迁移时需要运行的一切。服务器存储后端的默认实现使用git,因此它轻松支持标签版本的配置环境,以及可以访问用于管理内容的各种工具。很容易添加替代实现,并使用Spring配置将其插入。 

1.远程仓库配置文件

git地址:https://github.com/JIALEN/Spring-cloud.git

2.Spring Cloud Config服务器

服务器为外部配置(名称值对或等效的YAML内容)提供了基于资源的HTTP。服务器可以使用@EnableConfigServer注释轻松嵌入到Spring Boot应用程序中。所以这个应用程序是一个配置服务器:

pom.xml 

<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-server</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
 </dependency>

 启动类

@SpringBootApplication
//通过注解@EnableEurekaClient 表明自己是一个eurekaclient.
@EnableEurekaClient
//表明为配置服务器
@EnableConfigServer
public class ConfigServerApplication {

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

 application.yml配置文件

server:
  port: 8017

eureka:
  instance:
    hostname: localhost
    # 发呆时间,即服务失效时间(缺省为90s),就是超过15秒没有续约就会从注册表中剔除
    lease-expiration-duration-in-seconds: 15
    # 心跳时间,即服务续约间隔时间(缺省为30s)
    lease-renewal-interval-in-seconds: 5
  client:
   #设置eureka服务器所在的地址,查询服务和注册服务都需要依赖这个地址。高可用的注册中心时,
    #可以配置多个注册中心,通过逗号隔开
    service-url:
     defaultZone: http://localhost:8010/eureka/

spring:
  application:
  #这在以后的服务与服务之间相互调用一般都是根据这个name
    name: config-server
  cloud:
    config:
      server:
        git:
          #git地址
          uri: https://github.com/JIALEN/reptiledata.git
          #指定搜索路径,config-server会自动搜索根目录和指定目录(逗号分隔)下的文件
          search-paths: /config-file/configure
          default-label: master
          #有读取权限的git用户
          username: 
          password:

 如果Git仓库为公开仓库,可以不填写用户名和密码,如果是私有仓库需要填写,本例子是公开仓库,放心使用。

 启动程序:访问http://localhost:8017/config-client/dev

证明配置服务中心可以从远程程序获取配置信息。

spring cloud配置nacos_应用程序

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

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

3.客户端使用

要在应用程序中使用这些功能,只需将其构建为依赖于spring-cloud-config-client的Spring引导应用程序(例如,查看配置客户端或示例应用程序的测试用例)。

pom.xml文件

<!--eureka client -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-eureka</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>

bootstrap.yml配置文件

spring:
  cloud:
    config:
    #指明远程仓库的分支
      label: master
      #dev开发环境配置文件
      #test测试环境
      #pro正式环境
      profile: dev
      uri: http://localhost:8017/

这些属性必须写在bootstrap.properties配置文件中.

为什么在config client端却要使用bootstrap.yml或bootstrap.properties呢?因为bootstrap.properties的加载是先于application.properties的。

 application.yml配置文件

server:
  port: 8018

eureka:
  instance:
    hostname: localhost
    # 发呆时间,即服务失效时间(缺省为90s),就是超过15秒没有续约就会从注册表中剔除
    lease-expiration-duration-in-seconds: 15
    # 心跳时间,即服务续约间隔时间(缺省为30s)
    lease-renewal-interval-in-seconds: 5
  client:
   #设置eureka服务器所在的地址,查询服务和注册服务都需要依赖这个地址。高可用的注册中心时,
    #可以配置多个注册中心,通过逗号隔开
    service-url:
     defaultZone: http://localhost:8010/eureka/

spring:
  application:
  #这在以后的服务与服务之间相互调用一般都是根据这个name
    name: config-client

测试类

@SpringBootApplication
//通过注解@EnableEurekaClient 表明自己是一个eurekaclient.
@EnableEurekaClient
public class ConfigClientApplication {

   public static void main(String[] args) {
      SpringApplication.run(ConfigClientApplication.class, args);
   }
}
package com.alen.configclient.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author alen
 * @create 2018-08-18 12:20
 **/
@RestController
public class HelloController {
    @Value("${name}")
    private String name;
    @Value("${democonfigclient.message}")
    private String message;
    /**
     * 从配置中心读取的变量的值
     * @param
     * @return
     */
    @RequestMapping("/getname")
    public String getName() {
        System.out.println(name);
        System.out.println(message);
        return name;
    }
}

结果:

spring cloud配置nacos_服务器_02

4. SpringCloud Config(配置中心)实现配置自动刷新