目录
一、springcloud config介绍
Spring Cloud Config为分布式系统中的外部配置提供服务器和客户端支持。使用Config Server,您可以在所有环境中管理应用程序的外部属性。客户端和服务器上的概念映射与Spring Environment和PropertySource抽象相同,因此它们与Spring应用程序非常契合,但可以与任何以任何语言运行的应用程序一起使用。随着应用程序通过从开发人员到测试和生产的部署流程,您可以管理这些环境之间的配置,并确定应用程序具有迁移时需要运行的一切。服务器存储后端的默认实现使用git,因此它轻松支持标签版本的配置环境,以及可以访问用于管理内容的各种工具。可以轻松添加替代实现,并使用Spring配置将其插入。
二、原理
SpringCloud Config采用pull(拉)的读取模式获取git仓库的配合信息
Spring Cloud Config 规定了一套配置文件访问规则
访问规则 | 示例 |
---|---|
/{application}/{profile}[/{label}] | /config/dev/master |
/{application}-{profile}.{suffix} | /config-dev.yml |
/{label}/{application}-{profile}.{suffix} | /master/config-dev.yml |
访问规则内各参数说明如下。
{application}:应用名称,即配置文件的名称,例如 config-dev。
{profile}:环境名,一个项目通常都有开发(dev)版本、测试(test)环境版本、生产(prod)环境版本,配置文件则以 application-{profile}.yml 的形式进行区分,例如 application-dev.yml、application-test.yml、application-prod.yml 等。
{label}:Git 分支名,默认是 master 分支,当访问默认分支下的配置文件时,该参数可以省略,即第二种访问方式。
{suffix}:配置文件的后缀,例如 config-dev.yml 的后缀为 yml。
三、springboot接入方式
1.创建git配置仓库
这里使用的是gitee,创建完成代码仓库,工程内部如下
2.创建服务端config服务
服务端需要单独创建一个普通的springboot的web工程,具体创建这里不再赘述,下面是对于该工程的springcloud config的改造。(这里使用eurek作为注册中心,发现springcloud config服务)
2.1依赖引入
<!-- spring cloud config 服务端包 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
2.2启动配置
启动类中需要加入@EnableConfigServer注解
@EnableConfigServer
@EnableDiscoveryClient //这是使用eureka注册中心的时候用到的注解
@SpringBootApplication
public class ConfigServiceApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigServiceApplication.class, args);
}
}
2.3配置文件
bootstrap.yml
spring:
cloud:
config:
server:
git:
username: git仓库的用户名
password: git仓库的密码
application.yml
spring:
cloud:
config:
server:
git:
uri: https://gitee.com/lk0423/springcloud-study-config #配置文件所在仓库
search-paths: '{application}' #配置文件所在根目录
default-label: master #配置文件分支
#指定eureka服务地址
eureka:
client:
serviceUrl:
defaultZone: http://root:root@localhost:8761/eureka/
3.客户端对接config服务
需要接入配置中心的服务加入对应的依赖和配置即可使用
3.1依赖引入
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
3.2配置文件
这里使用eurek作为注册中心,发现springcloud config服务
spring:
application:
name: springcloud-demo
cloud:
config:
discovery:
enabled: true
service-id: springcloud-config
fail-fast: true
retry:
initial-interval: 1000
max-attempts: 6
max-interval: 2000
multiplier: 1.1
label: master
profile: dev
eureka:
client:
serviceUrl:
defaultZone: http://root:root@localhost:8761/eureka/
四、关于自动刷新
刷新微服务配置有以下几种方式:
- 1.使用 Spring Cloud Bus 的推送机制,告诉所有客户端有配置发生更改的消息。需要一个额外的中间件(如:RabbitMQ)运行,但 Consul 注册中心不支持这种推送机制;
- 2.使用 Spring Boot Actuator 提供的 @RefreshScope 注解;
- 3.重新启动所有服务器或容器;
五、优缺点
1.优点
- 提供服务端和客户端支持(spring cloud config server和spring cloud config client)
- 集中式管理分布式环境下的应用配置
- 基于Spring环境,无缝与Spring应用集成
- 可用于任何语言开发的程序
- 默认实现基于git仓库,可以进行版本管理
- 可替换自定义实现
2.缺点
- 没有界面,管理麻烦
- 没有权限管理
- 依赖繁多,例如:
如果使用Git作为后端存储,需要搭建GitLab或其他Git服务器集群
如需实现配置批量刷新,需要借助Spring Cloud Bus,依赖Kafka或RabbitMQ - 由于依赖太多,集群搭建很麻烦——GitLab、MQ、Config Server本身都得做集群