Spring Cloud Config提供集中化的外部配置支持,分为客户端和服务端两个部分,服务端也被称为配置中心,是一个独立的应用,获取git中的信息,比如密码,用户名。客户端就是微服务架构中各个微服务应用,它在启动的时候通过配置中心来获取配置信息,可以用git,svn等来存储配置信息。
一 创建服务端(配置中心)
1 在pom.xml引入以下依赖
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<dependency>
<groupId>org.eclipse.jgit</groupId>
<artifactId>org.eclipse.jgit</artifactId>
<version>4.4.1.201607150455-r</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Brixton.SR5</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
2 主类添加@EnableConfigServer,开启spring cloud config功能
@EnableConfigServer
@SpringBootApplication
public class ConfigServerApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigServerApplication.class, args);
}
}
3 application.properties配置信息
server.port=3001
spring.application.name=config-server
spring.cloud.config.server.git.uri=https://github.com/ericacw/didispace.git
spring.cloud.config.server.git.search-paths=config-repo
spring.cloud.config.server.git.username=ericacw@163.com
spring.cloud.config.server.git.password=xxxxx
4 在git仓库中,didispace的仓库下,建立config-repo文件,分别有四个文件,每个文件设置不同的内容
from=git-default-1.0
from=git-dev-1.0
from=git-test-1.0
from=git-prod-1.0
访问路径和映射关系如下:
/{application}/{profile}/{label}
/{application}-{profile}.yml
/{application}-{profile}.properties
/{label}/{application}-{profile}.properties
/{label}/{application}-{profile}.yml
映射到{application}-{profile}.properties对应的配置文件,其中label对应不同的分支,默认是master分支,
访问http://127.0.0.1:3001/didispace/prod/master,结果如下
{
"name": "didispace",
"profiles": [
"prod"
],
"label": "master",
"version": "664fb3aea69dbbdd8e7eb2a1ad4c018d015fbaf2",
"propertySources": [
{
"name": "https://github.com/ericacw/didispace.git/config-repo/didispace-prod.properties",
"source": {
"from": "git-prod-1.0"
}
},
{
"name": "https://github.com/ericacw/didispace.git/config-repo/didispace.properties",
"source": {
"from": "git-defalut-1.0"
}
}
]
}
5 config-server在git获取配置信息以后,会保存一份在config-server文件系统中,是通过git clone复制了一份在本地存储,然后读取内容返回给微服务应用进行加载,如果git仓库发生故障,再次发生请求时,config-server会报错,但是仍然会返回请求的配置内容,这些内容是本地缓存的。
二 配置客户端来获取config服务端的配置,命名为config-client,pom引入如下依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
2 创建bootstrap.yml的文件 ,bootstrap.yml优先级比较高,这样在启动的时候,信息才会被正确加载
server:
port: 3002
spring:
application:
name: didispace
cloud:
config:
uri: http://localhost:3001/
profile: dev
label: master
3 创建一个controller,来获取配置文件中的from属性值
@RefreshScope
@RestController
public class TestController {
@Value("${from}")
private String from;
@RequestMapping("/from")
public String index( ) {
return this.from ;
}
public void setFrom(String from)
{
this.from = from;
}
public String getFrom()
{
return from;
}
}
访问http://127.0.0.1:3002/from,结果如下图
三 只用注册中心来完成上述功能,讲config-server作为一个微服务应用,纳入Eureka的服务治理体系,这样我们的微服务应用就可以通过配置中心的服务名来获取配置信息,这种方式比上述方式更加有利于维护。
1 服务端配置,在pom新增
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
2 在application.properties新增
eureka.client.serviceUrl.defaultZone=http://peer1:1111/eureka/,http://peer2:2222/eureka/
3 新增@EnableEurekaServer注解,用来将该微服务注册到服务注册中心上面去
@EnableEurekaServer
@SpringBootApplication
@EnableConfigServer
public class ConfigServerApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigServerApplication.class, args);
}
}
4 启动服务,访问注册中心,发现配置服务已经被注册上去。
5 客户端 pom新增
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
6 bootstrap.yml文件添加eureka的配置,spring.cloud.config.discovery.enabled=true表示开启通过服务来访问config-server的功能,spring.cloud.config.discovery.service-id 来指定配置文件的服务名称。
spring:
application:
name: didispace
cloud:
config:
profile: dev
label: master
discovery:
enabled: true
service-id: config-server
eureka:
client:
serviceUrl:
defaultZone: http://peer1:1111/eureka/,http://peer2:2222/eureka/
7 启动类新增@EnableDiscoveryClient,把该微服务作为注册中心的客户端。
8 启动客户端,访问http://127.0.0.1:3002/from,一样可以获得from的值