一、Spring Cloud Config介绍
在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件。在Spring Cloud中,有分布式配置中心组件spring cloud config ,它支持配置服务放在配置服务的内存中(即本地),也支持放在远程Git仓库中。在spring cloud config 组件中,分两个角色,一是config server,二是config client
关于git上的配置文件命名格式:
- /{application}-{profile}.yml
- /{application}-{profile}.properties
- /{application}.yml
- /{application}.properties
如:config-test.properties
application就是config,在配置的时候name就是config
profile就是test,在配置的时候profile就是test
后缀是自动匹配的,无需配置
二、构建Spring Cloud Config Server
- 首先创建一个普通的Spring Boot Web项目:
然后加上Config Server的依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--Config Server-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
- 添加开启ConfigServer注解:
@SpringBootApplication
//这个是开启ConfigServer的注解
@EnableConfigServer
public class ConfigServerApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigServerApplication.class, args);
}
}
- 添加配置文件
#端口号
server.port=9000
#服务名字
spring.application.name=config_server
#git仓库地址
spring.cloud.config.server.git.uri=https://gitee.com/XXXXX/config.git
#git仓库分支
spring.cloud.config.label=master
# git仓库路径,如果配置文件是在git仓库的根目录下可以不用配置
spring.cloud.config.server.git.search-paths=myconfigpath
#如果是私人的需要用户名及用户密码才能访问,没有可以不用配置
spring.cloud.config.server.git.username=you username
spring.cloud.config.server.git.password=you password
- 运行测试
然后我们就可以运行项目,访问项目
http://localhost:9000/config/test
访问方法有多种,以下为源码,包含了所有可以请求的格式:
这里的参数名和客户端配置的时候的参数名是一样的。
这样的效果就是成功了
如果请求报500错误,情况如下:
这个是由于spring-cloud版本的问题,将版本改为.RC1就好了
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<spring-cloud.version>Finchley.RC1</spring-cloud.version>
</properties>
三、构建Spring Cloud Config Client
- 这个和前面创建Spring Cloud Config Server是一样的不过加上的依赖是Config Client:
<!--Config Client-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
- 添加配置文件,客户端不用添加注解,他会在启动的时候自动运行:
这里建议大家使用bootstrap.properties配置文件,因为bootstrap.properties的配置文件是在项目启动的时候第一个加载的,关于详细的spring boot的配置优先级大家可以去了解一下,后面我会写的。
配置如下:
#启动端口
server.port=9001
#服务名
spring.application.name=config_Client
#配置文件名
spring.cloud.config.name=config
#配置文件环境
spring.cloud.config.profile=test
#git分支
spring.cloud.config.label=master
#配置服务地址
spring.cloud.config.uri=http://localhost:9000
然后运行服务初始化使用的配置文件就是git上的配置文件了,为了更加直观的知道配置文件是否加载成功我们可以写一个接口将配置显示出来,代码如下:
@SpringBootApplication
@Controller
public class ConfigClientApplication {
@Value("${name}")
String name;
public static void main(String[] args) {
SpringApplication.run(ConfigClientApplication.class, args);
}
@RequestMapping("getValue")
@ResponseBody
public String getName(){
return name;
}
}
然后运行服务,访问你写的接口,得到你的配置参数就说明成功了。
关于刷新配置,配置中心的高可用,动态刷新集群配置,配置文件加密我会在后面写出来
我也是一个刚学习这个的菜鸟,有什么不对的地方望大佬指点, 有兴趣的朋友可以加群我们一起讨论交流,
群里有很多的资料,还有一位学习资料的叮当猫,群号:606278528