一、使用Git 作为配置中心

创建配置中心仓库, 用于存放配置文件。 先创建文件夹: config-repo作为配置存放仓库,包含以下文件

  1. application-config-dev.yml
  2. application-config-prod.yml
  3. application-config-test.yml

文件包含的内容

  1. env:
  2. name: dev #prod test

1.1 创建Config-Server 服务端

  • 创建项目 config-server-git
  • 依赖

    1. <dependency>
    2. <groupId>org.springframework.cloud</groupId>
    3. <artifactId>spring-cloud-config-server</artifactId>
    4. </dependency>
  • 配置 ```yaml server: port: 8888

management: endpoints: health: show-details: always web: exposure: include: ‘*’ spring: cloud: consul: discovery: prefer-ip-address: true host: ‘localhost’ port: 8500

  1. #本地存储配置的方式
  2. # 1.设置属性spring.profiles.active=native, Config Server会默认从应用的src/main/resource目录下检索配置文件
  3. # 2. 也可以通过spring.cloud.config.server.native.searchLocations=file:E:/properties/属性来指定配置文件的位置
  4. config:
  5. server:
  6. git:

uri: https://github.com/h-dj/SpringCloud-Learning/ # 配置git仓库的地址

search-paths: config-repo # git仓库地址下的相对地址,可以配置多个,用,分割。

username: # git仓库的账号

password:

  1. uri: file:///home/hdj/IdeaProjects/config-repo
  1. - 添加注解
  2. ```java
  3. @EnableConfigServer
  4. @SpringBootApplication
  5. public class ConfigServerGitApplication {
  6. public static void main(String[] args) {
  7. SpringApplication.run(ConfigServerGitApplication.class, args);
  8. }
  9. }
  • 启动测试
  1. 先本地启动consul 注册中心
  2. 再启动配置中心访问 http://localhost:8888/application-config/dev

image.png

1.2 配置仓库中的配置文件转换为web接口规则

  • 如配置文件: application-config-dev.yml
  • application: application-config
  • profile: dev
  • 访问的地址为: /application-config/dev

    1. /{application}/{profile}[/{label}]
    2. /{application}-{profile}.yml
    3. /{label}/{application}-{profile}.yml
    4. /{application}-{profile}.properties
    5. /{label}/{application}-{profile}.properties

    1.3 Config-Clients 客户端

  • 配置加载优先:

配置中心的配置文件 > 项目内bootstrap.properties > 项目内application.properties

  • 创建项目config-client-git
  • 依赖

    1. <dependency>
    2. <groupId>org.springframework.cloud</groupId>
    3. <artifactId>spring-cloud-starter-config</artifactId>
    4. </dependency>
  • 配置bootstrap.yml

    1. spring:
    2. application:
    3. name: config-client
    4. cloud:
    5. config:
    6. discovery:
    7. #spring.cloud.config.uri=http://localhost:8888
    8. #使用服务发现的方式
    9. enabled: true
    10. service-id: config-service
    11. consul:
    12. discovery:
    13. prefer-ip-address: true
    14. host: localhost
    15. port: 8500
  • application.yml ```yaml server: port: 8989

management: endpoints: health: show-details: always web: exposure: include: ‘*’

order: discount: 100

  1. - file:///home/hdj/IdeaProjects/config-repo 仓库的application.yml
  2. ```yaml
  3. order:
  4. discount: 60
  • 属性配置

    1. @ConfigurationProperties("order")
    2. @RefreshScope //刷新当前绑定的属性
    3. @Data
    4. @Component
    5. public class OrderProperties {
    6. private Integer discount = 100;
    7. }
  • 使用

    1. @RestController
    2. public class ConfigController {
    3. @Autowired
    4. OrderProperties orderProperties;
    5. @GetMapping("/getConfig")
    6. public String get() {
    7. return "折扣:" + orderProperties.getDiscount();
    8. }
    9. }
  • 启动测试

  1. 本地先启动consul 注册中心
  2. 再启动config-server-git 配置中心服务端
  3. 然后启动 config-client-git 客户端 ```shell

    访问

    http://192.168.43.122:8989/getConfig

    响应

    60

修改config-repo 仓库的application.yml 的discount:50

刷新

curl -XPOST http://192.168.43.122:8989/actuator/refresh [“order.discount”]

再访问

http://192.168.43.122:8989/getConfig

响应

50 ```