在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件。
在 Spring Cloud
中,有分布式配置中心组件 Spring Cloud Config
,它支持配置服务放在配置服务的内存中(即本地),也支持放在远程 Git 仓库中。
在 Spring Cloud Config
组件中,分两个角色,一是服务端 Config Server
,二是客户端 Config Client
在 pom.xml
中主要添加 spring-cloud-starter-netflix-eureka-server
和 spring-cloud-config-server
依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-server</artifactId> </dependency>
需要在 bootstrap.yml
中配置,原因是可以优先加载配置。
spring: cloud: config: label: {git仓库标签} server: git: uri: {git仓库地址} search-paths: {仓库内文件存放路径} username: {用户名} password: {密码}
配置说明:
spring.cloud.config.label spring.cloud.config.server.git.uri spring.cloud.config.server.git.search-paths spring.cloud.config.server.git.username spring.cloud.config.server.git.password
注意
:如果使用 GitLab 作为仓库的话, spring.cloud.config.server.git.uri
需要在结尾加上 .git
,GitHub 则不用。
在Git 仓库中创建文件夹,用于存放各个服务的资源配置文件。
一般在开发环境中,都会独立出一个 Git 项目用来存放资源配置配置文件。
http://{ip}:{port}/{applicationName}/{profile}[/{label}] http://{ip}:{port}/{applicationName}-{profile}.yml http://{ip}:{port}/{label}/{applicationName}-{profile}.yml
在 hello-spring-cloud-netflix-eureka
工程的 pom.xml
中添加 spring-cloud-starter-config
依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency>
在 Git 仓库中存放配置文件的目录下创建 hello-spring-cloud-netflix-eureka-dev.yml
spring: application: name: hello-spring-cloud-netflix-eureka server: port: 8761 eureka: instance: hostname: localhost client: registerWithEureka: false fetchRegistry: false serviceUrl: defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
修改 hello-spring-cloud-netflix-eureka
工程的 applicaiton.yml
为 bootstrap.yml
并清空文件
在 bootstrap.yml
中添加 spring-cloud-config
客户端的配置
spring: cloud: config: uri: http://localhost:8888 name: hello-spring-cloud-netflix-eureka-dev label: master profile: dev
配置说明:
spring.cloud.config.uri
:配置服务中心的网址 spring.cloud.config.name
:配置资源配置文件名称(不含后缀) spring.cloud.config.label
:配置仓库的分支
spring.cloud.config.profile
:配置文件的环境标识
dev test prod
spring-cloud-config
> spring-cloud-eureka
服务