1.Config Server

Config Server是Spring Cloud中重要的一环,Config Server 就是配置服务中心,将配置放到配置中心服务上。

Config Server获取配置支持的方式很多,包括Git仓库(github/gitee等),任何与JDBC兼容的数据库,Subversion,Hashicorp Vault,Credhub和本地文件系统。

搭建一个配置中心服务也很方便。

第一步:引入依赖

dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-server</artifactId>
        </dependency>
        <!--        spring-cloud-starter-bootstrap是加载bootstrap.yml-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bootstrap</artifactId>
        </dependency>

第二步:启动类

新建一个启动类并增加@EnableConfigServer注解

@SpringBootApplication
@EnableConfigServer
public class ConfigServerProgram {

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

第三步:配置中心配置

在application.yml或者bootstarap.yml增加配置,config server支持的方式比较多,目前我只配置git,svn,本地。

GIT方式配置:


spring:
  application:
    name: configserver
  profiles:
    active: git #设置使用本地配置(默认是git,可以设置:subversion(SVN),native(本地))
  cloud:
    config:
      server:
        #如下是GIT配置
        git:
          uri: https://github.com/zuowj/learning-demos     # 配置git仓库的地址(最后不需要带/,否则会出现:No custom http config found for URL: XXX)
          search-paths: config                             # git仓库地址下的相对搜索地址(可用使用通配符),可以配置多个,用,分割。可以{application}实现按应用查配置
          username:                                             # git仓库的账号(公开仓库无需账号信息)
          password:                                             # git仓库的密码(公开仓库无需账号信息)
          default-label: master                             #git默认分支
          

SVN方式配置:

spring:
  application:
    name: configserver
  profiles:
    active: subversion #设置使用本地配置(默认是git,可以设置:subversion(SVN),native(本地))
  cloud:
    config:
      server:
        #如下是SVN配置
        svn:
          uri: http://svnhost:port/svn/app-config #SVN仓库地址
          username: svnuser #SVN账号(如果没有权限可为空)
          password: svnpassword #SVN密码(如果没有权限可为空)
          default-label: trunk #默认SVN分支

本地方式配置:本地方式一定要指定spring.profiles.active=native

spring:
  application:
    name: config-server
  profiles:
    #native表示本地方式
    active: native
  cloud:
    config:
      server:
        native:
          # 配置文件存放路径
          search-locations: file:/MyTemp/configserver,classpath:/config-server

配置以上的任意一种就可以启动服务,然后就可以用postman访问

/{application}/{profile}[/{label}]
/{application}-{profile}.yml
/{label}/{application}-{profile}.yml
/{application}-{profile}.properties
/{label}/{application}-{profile}.properties
{application} 就是应用名称,对应到配置文件上来,就是配置文件的名称部分,例如我上面创建的配置文件。

{profile} 就是配置文件的版本,我们的项目有开发版本、测试环境版本、生产环境版本,对应到配置文件上来就是以 application-{profile}.yml 加以区分,例如application-dev.yml、application-sit.yml、application-prod.yml。

{label} 表示 git 分支,默认是 master 分支,如果项目是以分支做区分也是可以的,那就可以通过不同的 label 来控制访问不同的配置文件了。

 2.Config Client

         config server搭建完成后,需要配合config client访问。

第一步:引入依赖

 <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-client</artifactId>
            <version>3.0.3</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bootstrap</artifactId>
            <version>3.0.3</version>
        </dependency>

第二步:增加 bootstrap.yml的配置

        config client的配置必须放bootstrap.yml的配置文件中,才会连接上config server,不然就会连接异常。

bootstrap.yml

spring:
  application:
    name: producer
  profiles:
    active: dev
  cloud:
    config:
      uri: http://localhost:9090
      #      指定加载的环境
      profile: one

启动测试:

 3.本地配置和远程配置优先级

        引用spring cloud config时,Spring cloud默认以远程配置为最高优先级,如果希望本地的配置文件(如application.yml或bootstrap.yml)的某些属性能覆盖远程的同名属性值,则需要在远程配置文件增加以下属性配置

spring.cloud.config.override-none=true

属性默认值说明
spring.cloud.config.allow-overridetrue外部源配置是否可被覆盖
spring.cloud.config.override-nonefalse外部源配置是否不覆盖任何源
spring.cloud.config.override-system-propertiestrue外部源配置是否可覆盖本地属性

当allow-override和override-none同时为true,远程配置的优先级降低,不能覆盖其他配置; 

详细可以参考:

PropertySourceBootstrapProperties类 

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐