Spring Cloud Config

参考个人项目

参考个人项目 : (希望大家能给个star~)
https://github.com/FunriLy/springcloud-study/tree/master/%E6%A1%88%E4%BE%8B5

什么是 Spring Cloud Config?

配置管理工具包,让你可以把配置放到远程服务器,集中化管理集群配置,目前支持本地存储、Git以及Subversion。
场景介绍:在一个 Application 中,很经常需要连接资源和其它应用,经常有很多需要外部设置的信息去调整Application行为。我们在实际开发应用中的会经常见到的xml、properties、yaml等就是配置信息,但这种做法有一定的缺陷:每次更新需要重新打包和重启。

创建 Spring Cloud Config Server(Git 存储)

  • 这里我用了我原本的”服务注册中心”(Eureka Server),将其改造为”配置中心”(Config Server)。

  • 引入依赖

       <!-- Config Server -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-server</artifactId>
        </dependency>
  •  在启动主类添加@EnableConfigServer注解,开启 Config Server。
@SpringBootApplication
@EnableEurekaServer
@EnableConfigServer
public class MySpringCloudApplication {
    public static void main(String[] args) {
        SpringApplication.run(MySpringCloudApplication.class, args);
    }
}

 

  • 在Github上创建一个项目,并在其中添加配置文件 config-client.properties,在里面添加一个属性config=hello world !

  • application.properties中配置服务信息以及git信息(这里不包括了 Eureka Server 的配置,自行补充)

server.port=8761
spring.cloud.config.server.git.uri=https://github.com/FunriLy/springcloud-study/
spring.cloud.config.server.git.searchPaths=config-repo
spring.cloud.config.server.git.username=Username
spring.cloud.config.server.git.password=Password
{
  "name": "config-client",
  "profiles": [
    "default"
  ],
  "label": null,
  "version": "af7ce2a15dcdea9dab42e6b44d37e401072382d8",
  "propertySources": [
    {
      "name": "https://github.com/FunriLy/springcloud-study/config-repo/config-client.properties",
      "source": {
        "configword": "hello world !"
      }
    }
  ]
}

 

创建一个Spring Cloud Config Client

  • 这里我用到了原来的”服务提供者”(Eureka Client),将其改造为 Config Client。

  • resource下创建bootstrap.properties,并设置信息,具体如下:

spring.application.name=config-client
spring.cloud.config.profile=default
spring.cloud.config.label=master
spring.cloud.config.uri=http://localhost:8761/

 

注意这里是bootstrap.properties而不是appliction.properties。
因为bootstrap.properties会在应用启动之前读取,而spring.cloud.config.uri会影响应用启动
  • 创建一个Controller来进行测试。
@RestController
public class ConfigController {

    @Value("${configword}")
    String configword;

    @RequestMapping("/config")
    public String printfConfig(){
        return "The Config Word Is : "+configword;
    }
}
The Config Word Is : hello world !

 

附录

来源于 Spring Cloud Config 中文文档。

URL与配置文件的映射关系

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

application是SpringApplicationspring.config.name,(一般来说’application’是一个常规的Spring Boot应用),profile是一个active的profile(或者逗号分隔的属性列表),label是一个可选的git标签(默认为”master”)。
比如,我的文件名是”config-client”,一般在Github上都是default环境,默认为master分支。所以就是/config-client/default/master

Config Server 配置文件

  • spring.cloud.config.server.git.uri:配置git仓库位置
  • spring.cloud.config.server.git.searchPaths:配置仓库路径下的相对搜索位置,可以配置多个
  • spring.cloud.config.server.git.username:访问git仓库的用户名
  • spring.cloud.config.server.git.password:访问git仓库的用户密码

Config Client 配置文件

  • spring.application.name:对应前配置文件中的{application}部分
  • spring.cloud.config.profile:对应前配置文件中的{profile}部分
  • spring.cloud.config.label:对应前配置文件的git分支  
  • spring.cloud.config.uri:配置中心的地址    

其他

在Config Server中,还有一种不使用Git的”native”的配置方式,这种方式是从本地classpath 或文件系统中加载配置文件(使用 “spring.cloud.config.server.native.searchLocations”配置项进行设置)。 加载Config Server 的”spring.profiles.active=native”配置项可以开启native配置。如:

spring.profiles.active=native
spring.cloud.config.server.native.searchLocations=file:D:/properties

 注意 : 牢记使用file:前缀来指示资源(默认没有前缀是从classpath中去文件)。也可以嵌入${}环境参数占位符,但是windows系统下使用绝对路径,前缀后面需要多加个”/”。

 

posted on 2017-12-25 14:31  巨象  阅读(8691)  评论(0编辑  收藏  举报