搭建 Spring Cloud Config

目录

  1. Spring Cloud Config
    1. 启动Config服务
    2. 获取配置信息

Spring Cloud Config

Spring Cloud Config为分布式系统管理配置文件提供配置文件管理中心支持,以及访问该配置文件管理中心的客户端支持。Spring Cloud Config支持子目录(能够支持多个项目的配置管理),并且支持按环境区分配置文件(不同环境访问不同的配置文件)。服务端提供http接口返回配置文件的内容,客户端将这些配置信息解析并抽象成Environment和PropertySource,如果Spring Cloud Config客户端是基于Spring框架搭建的应用,那么这些配置信息会被Spring框架中的Environment和PropertySource统一管理(既然里本引用的配置信息,同时也管理Config Server获取的配置信息)。但这不意味着Spring Cloud Config只适合基于Spring搭建的应用。由于Config Server提供协议接口访问配置文件,所以任意支持http请求的应用都能访问Config Server的配置内容。

Config Server存储配置文件支持使用git仓库是现实,支持访问不同git分支下的配置文件。

Spring Cloud Config Server的功能:

  • 提供HTTP接口访问配置信息(健值对)。
  • 支持加解密配置信息
  • Spring Boot通过@EnableConfigServer可以快速搭建服务

Spring Cloud Config Client的功能:

  • 将读取到远程服务上的配置信息推到本地Spring Environment中,便于配置信息的统一管理
  • 加解密配置信息

启动Config服务

Spring cloud Config主要依赖 spring-cloud-config-server,快速启动可以配置如下:

<properties>
     <java.version>1.8</java.version>
     <spring-cloud.version>Hoxton.SR4</spring-cloud.version>
 </properties>

 <dependencies>
     <dependency>
         <groupId>org.springframework.cloud</groupId>
         <artifactId>spring-cloud-config-server</artifactId>
     </dependency>

     <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-test</artifactId>
         <scope>test</scope>
         <exclusions>
             <exclusion>
                 <groupId>org.junit.vintage</groupId>
                 <artifactId>junit-vintage-engine</artifactId>
             </exclusion>
         </exclusions>
     </dependency>
 </dependencies>

 <dependencyManagement>
     <dependencies>
         <dependency>
             <groupId>org.springframework.cloud</groupId>
             <artifactId>spring-cloud-dependencies</artifactId>
             <version>${spring-cloud.version}</version>
             <type>pom</type>
             <scope>import</scope>
         </dependency>
     </dependencies>
 </dependencyManagement>

项目资源文件的配置文件bootstrap.yml或者application.properties的配置如下:

server:
  port: 8888
spring:
  application:
    name: config server

cloud:
 config:
   server:
     git:
       # 本机上用户目录下的config-repo文件夹
       uri: file:///${user.home}/config-repo 

项目添加启动入口:

@EnableConfigServer
@SpringBootApplication
public class ConfigserverApplication {

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

在用户目录下创建config-repo文件夹,在该文件夹下创建application-dev1.properties文件,存储配置信息:

info:
env: dev1
application: application
database: dbuser
password: '{cipher}FKSAJDFGYOS8F7GLHAKERGFHLSAJ'

以上配置完毕后,启动项目。服务位于8888端口号上。通过http://localhost:8888/application/dev1 可以applicatio-dev1.properties。通过curl访问的结果如下:

{"name":"application","profiles":["dev1"],"label":null,"version":"3d3168009afea0aeb187ed03f8f1612a1c2d79ae","state":null,"propertySources":[{"name":"file:Users/${user.home}/config-repo/application-dev1.yml","source":{"info.env":"dev1","info.application":"application","info.database":"dbuser","info.password":"FKSAJDFGYOS8F7GLHAKERGFHLSAJ"}}]}

配置文件的的名字有项目名称加上横杠链接符,加上环境名称组成,比如application-dev1.properties,其中application表示项目名称,dev1表示环境名称,存储的是application在dev1环境下的配置信息。

本地文件夹只是用来测试,Spring Cloud Config通常通过git来管理配置文件,所以正式环境下,修改成正式的git仓库地址。如果git仓库需要账号密码才能访问,那么需要在配置中增加账号密码的配置:

cloud:
 config:
   server:
     git:
       username: username
       password: password

处理账号密码认证外,还支持ssh方式访问git仓库:

hostKey: someHostKey
hostKeyAlgorithm: ssh-rsa
privateKey:privateKey

通常情况下,我们需要Spring Cloud Config托管多个项目的配置文件,需要用到它的Search Paths功能:

cloud:
 config:
   server:
     git:
       searchPaths: '{application}'

我们在git项目中创建test1和test2文件夹,并在这两个文件夹下创建test1-dev1.yml,test1-dev2.yml,test2-dev1,test2-dev2.yml文件。通过http://localhost:8888/test1/dev1/masterhttp://localhost:8888/test1/dev2/master,http://localhost:8888/test2/dev1/masterhttp://localhost:8888/test2/dev2/master 分别访问这四个文件。

当我们访问http://localhost:8888/test1/dev1/master 时,Spring Cloud Config服务会将git仓库中的资源下载到本地,一遍下次快速获取配置信息。但是在部分服务器上该路径是临时目录,会被服务器定期清理导致无法访问到配置信息。我们可以配置Force pull属性为true(默认false),那么配置服务发现本地文件已经不存在,则会从git仓库中拉取配置信息。配置如下:

cloud:
 config:
   server:
     git:
       force-pull: true

获取配置信息

Spring Cloud支持将从配置信息服务上获取到的配置信息添加到org.springframework.core.env.Environment中。以下是客户端配置配置服务地址并获取配置信息的相关配置

spring:
  cloud:
    config:
      discovery:
        enabled: true
        service-id: config-service
      name: test1
      profile: dev1
      username: username
      password: password

由于是通过Eureka服务获取配置服务的服务地址,所以以上配置还需要Eureka客户端的支持。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值