在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件。
在 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
服务