springcloudconfig整理篇

本文详细介绍Spring Cloud Config的使用方法,包括服务端与客户端的配置流程,支持的存储库类型如Git、SVN等,并提供了搭建教程及配置示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

springcloudconfig使用教程

支持的库

  • git(默认)
  • svn
  • 数据库
  • redis
  • 支持混合多库使用

官网

https://docs.spring.io/spring-cloud-config/docs/3.1.4-SNAPSHOT/reference/html

git库使用

服务端

pom.xml引入需要的包

<!--SpringCloud 2020.*以后的版本默认禁用了bootstrap,导致读取配置文件时读取不到该属性。 缺少 bootstrap.yml无法被识别-->
<dependency>
   <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>

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

服务端 bootstrap.yml 部分配置

spring:
  cloud:
    config: # 类 AbstractScmAccessor 的 getSearchLocations 方法
      enabled: true #默认开启,false时,客户端不可读取配置服务中心配置
      server:
        git: #默认使用git
          uri: https://gitee.com/iwangchun/config-test.git
          basedir: D:/config2
          default-label: master

主类配置

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

@EnableConfigServer
@EnableEurekaClient
@SpringBootApplication
public class ConfigService2014 {

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

}

客户端

pom.xml引入需要的包

<!--SpringCloud 2020.*以后的版本默认禁用了bootstrap,导致读取配置文件时读取不到该属性。 缺少 bootstrap.yml无法被识别-->
<dependency>
   <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>

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

<!--自动刷新配置 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>

wind搭建rabbitMQ服务端

先安装: https://www.erlang.org/downloads
在安装: https://www.rabbitmq.com/download.html
步骤和遇到问题参考:https://blog.youkuaiyun.com/HK_HH/article/details/119280657

客户端bootstrap.yml 部分配置

spring:
  profiles:
    active: dev
  config:
    use-legacy-processing: true # 【使用 spring.profiles.include的时候需要设置为true】 - 待确认
  cloud:
    config:
      enabled: true
      # 直接使用url的方式
#      uri: http://localhost:2014

      # 使用服务器发现模式,前提需要在bootstrap.yml中添加eureka中指定注册中心地址
      discovery:
        enabled: true #开启config配置中心
        service-id: config-service-2014 #配置中心服务名
      label: master #所在分支
      name: springconfig,myconfig #文件的application名,需要指定多个中间用逗号隔开
      profile: dev #文件profile名
      
  rabbitmq:
    host: localhost
    port: 5672
    username: guest
    password: guest

# 刷新配置    
management:
  endpoints:
    web:
      exposure:
        #        include: refresh
        include: "*"
  endpoint:
    health:
      show-details: ALWAYS

配置类,听说@Value() 注解无法动态刷新,待确认

package com.itchun.config;

import lombok.Getter;
import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@ConfigurationProperties(prefix = "itchun")
@Component
@Getter
@Setter
public class YmlConfig {
private String name;

    private String age;

    private String sex;

    private String see;

    private String book;

    private String app;
}

接口类

package com.itchun.controller;

import com.itchun.config.YmlConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ConfigController {

    @Autowired
    private YmlConfig ymlConfig;

    @RequestMapping("config")
    private Object name() {
        return ymlConfig;
    }
}

请求示例:

示例:
========================================================================================================================
根目录下文件
    - springconfig.yml
    - springconfig-dev.yml
    - springconfig-prod.yml
    - application.yml

配置:
    label: master
    name: springconfig
    profile: dev
结论:
    优先级 application.yml < springconfig.yml < springconfig-dev.yml

配置:
    label: master
    name: springconfig
    profile: prod
结论:
    优先级 application.yml < springconfig.yml < springconfig-prod.yml

配置:
    label: master
    name: springconfig
    profile: xx
结论:
    优先级 application.yml < springconfig.yml

配置:
    label: master
    name: springconfig
    profile:
结论:
    获取不到参数

配置:
    label: master
    name:
    profile:
结论:
    获取不到参数

配置:
    label: master
    name: xx
    profile: xx
结论:
    读取到的是 application.yml 中的配置



示例:
========================================================================================================================
根目录下文件
    - springconfig.yml
    - springconfig-dev.yml
    - springconfig-prod.yml
    - application.yml
    - /app/springconfig-app.yml
    - /app/springconfig-dev.yml

配置:
    label: master
    name: springconfig
    profile: app
结论:
    优先级 application.yml < springconfig.yml < /app/springconfig-app.yml

配置:
    label: master
    name: springconfig
    profile: dev
结论:
    优先级 application.yml < springconfig.yml < /app/springconfig-dev.yml



示例:
========================================================================================================================
根目录下文件
    - application.yml
    - springconfig.yml
    - springconfig-dev.yml
    - springconfig-prod.yml
    - /app/springconfig-app.yml
    - /app/springconfig-dev.yml
    - /web/springconfig-web.yml
    - /web/springconfig-dev.yml
配置:
    服务端:
        search-paths:
    客户端:
        label: master
        name: springconfig
        profile: app
结论:
    优先级 application.yml < springconfig.yml

配置:
    服务端:
        search-paths:
        - app
        - web
    客户端:
        label: master
        name: springconfig
        profile: app
结论:
    优先级 application.yml < springconfig.yml < /app/springconfig-app.yml

配置:
    服务端:
        search-paths:
        - app
        - web
    客户端:
        label: master
        name: springconfig
        profile: web
结论:
    优先级 application.yml < springconfig.yml < /web/springconfig-web.yml

配置:
    服务端:
        search-paths:
        - app
        - web
    客户端:
        label: master
        name: springconfig
        profile: dev
结论:
    优先级 application.yml < springconfig.yml < /web/springconfig-dev.yml

配置:
    服务端:
        search-paths:
        - web
        - app
    客户端:
        label: master
        name: springconfig
        profile: dev
结论:
    优先级 application.yml < springconfig.yml < /app/springconfig-dev.yml

单个服务刷新配置:

  • 修改配置提交git
  • 请求服务接口: http://localhost:2015/actuator/refresh

批量服务刷新配置:

官网文档:https://spring.io/projects/spring-cloud-bus

  • 修改配置提交git
  • 请求任意一个客户端服务接口: http://localhost:2015/actuator/busrefresh
### Spring Cloud Config 使用指南 #### 配置客户端依赖 为了使微服务能够利用集中化配置管理的优势,在构建基于Spring的应用程序时,应当确保项目中包含了`Spring Cloud Config`客户端和`Spring Boot Actuator`的依赖[^1]。 ```xml <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> ``` #### 启动类导入声明 在应用程序启动类文件里需引入必要的包来支持应用正常运行,例如: ```java import org.springframework.boot.SpringApplication; // ...其他必要imports... ``` 通过上述方式可以初始化并加载整个Spring上下文环境[^2]。 #### 远程仓库路径设置 当使用Git作为远程存储库时,可以通过指定特定参数来自定义资源查找位置。这允许更灵活地管理和分发不同环境下所需的不同版本配置文件。具体来说就是可以在配置项`searchPaths`下加入占位符如`{application}`、`{profile}`, 或者加上标签形式`{label}`(视需求而定),从而实现动态匹配相应的目录结构[^3]: ```yaml spring: cloud: config: server: git: uri: https://github.com/spring-cloud-samples/config-repo searchPaths: '{application}' ``` #### 命令行工具部署方法 对于某些场景下的快速迭代开发或者测试目的而言,可以直接借助命令行界面(CLI)完成简单便捷的服务实例创建工作。比如下面这条指令就展示了如何利用Skipper CLI来进行本地平台上的应用程序部署操作[^4]: ```bash java -jar ~/skipper-cli.jar deploy --platform local app-definition.yaml ``` 以上即为关于`Spring Cloud Config`的一些基础指导说明及其可能遇到的相关问题解答概览。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值