欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Spring Cloud(三)spring cloud config+git配置中心

程序员文章站 2022-07-15 09:59:36
...

Spring Cloud(三)spring cloud config+git配置中心

  1. 在git上创建文件夹,放上开发,测试,生产环境的配置文件
  2. 在本地创建config-server-git项目
  3. 完成application.yml配置
  4. 启动ConfigServerGitApplication.java

spring-config原理参考

Server端
- GitHub目录结构
Spring Cloud(三)spring cloud config+git配置中心
- 本地创建项目config-server-git
Spring Cloud(三)spring cloud config+git配置中心

  • application.yml
server:
  port: 8000   #注册中心端口是8001

spring:
  application:
    name: spring-cloud-config-server
  cloud:
    config:
      server:
        git:
          uri: https://github.com/chouxin/spring-cloud-config-repo/
          search-paths: config-repo
          username: 342aaa@qq.com
          password: xxxxxxxx
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8001/eureka/
  • ConfigServerGitApplication.java
@EnableConfigServer
@EnableDiscoveryClient
@SpringBootApplication
public class ConfigServerGitApplication {

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

测试

Spring Cloud(三)spring cloud config+git配置中心

Client端

  1. 创建config-client-git项目
  2. 创建bootstrap.yml文件
  3. 创建测试demo

spring-config-client项目目录结构
Spring Cloud(三)spring cloud config+git配置中心

**特别注意:上面这些与spring-cloud相关的属性必须配置在
bootstrap.properties中,config部分内容才能被正确加载。因为config
的相关配置会先于application.properties,而bootstrap.properties
的加载也是先于application.properties。**
  • application.yml
spring:
  application:
    name: config-client-git

server:
  port: 9000


eureka:
  client:
    service-url:
      defaultZone: http://localhost:8001/eureka/
  • bootstrap.yml
spring:
  cloud:
    config:
      name: cn-qx-config
      profile: dev
      uri: http://localhost:8000/
      label: master
server:
  port: 9000

#spring.application.name:对应{application}部分
#spring.cloud.config.name:对应配置文件名称 cn-qx-config-dev.yml
#spring.cloud.config.profile:对应{profile}部分
#spring.cloud.config.label:对应git的分支。如果配置中心使用的是本地存储,则该参数无用
#spring.cloud.config.uri:配置中心的具体地址
#spring.cloud.config.discovery.service-id:指定配置中心的service-id,便于扩展为高可用配置集群。
  • 启动类
@EnableDiscoveryClient
@SpringBootApplication
public class ConfigClientGitApplication {

    public static void main(String[] args) {
        SpringApplication.run(ConfigClientGitApplication.class, args);
    }
}
  • 浏览器调用
@RestController
public class HelloController {

    @Value("${qx.hello}")
    private String gitConfigName;

    @GetMapping("/hello")
    public String fromGitHubServer(){
        return gitConfigName;
    }

}
  • 测试

浏览器输入
http://localhost:9000/hello
config客户端调用config服务端,
Spring Cloud(三)spring cloud config+git配置中心

完成啦

spring-cloud-config代码示例完整

spring-cloud-config资源文件

  • 问题
  • 问题1:spring-cloud-config-git-client不能动态的感应服务端配置文件的改变,即服务端的配置文件改变了,客户端不能实时获取到(只有在启动的时候才会去获取资源配置文件)
  • 解决:Spring Cloud Config分服务端和客户端,服务端负责将git(svn)中存储的配置文件发布成REST接口,客户端可以从服务端REST接口获取配置。但客户端并不能主动感知到配置的变化,从而主动去获取新的配置。客户端如何去主动获取新的配置信息呢,springcloud已经给我们提供了解决方案,每个客户端通过POST方法触发各自的/refresh
  • 修改spring-cloud-config-client-git项目可以达到refresh的功能
  • 添加依赖
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
#增加了spring-boot-starter-actuator包,spring-boot-starter-actuator是一套监控的功能,可以监控程序在运行时状态,其中就包括/refresh的功能。
  • 开启更新机制
  • 网上资料显示使用 post请求访问 http://localhost:9000/refresh 即可完成,但是试验发现,spring boot 2.0不能使用,亟待解决
  • 接下来会用更加厉害的 spring cloud bus来实现config的配置化,方便管理和集群开发