九、Config Server
在上面的项目中,每个项目的配置文件都在自己的项目中配置,这样,在生产环境中,会带来很多麻烦,每改动一个配置可能要修改很多个项目, 被修改的项目可能都要重新打包,重新部署。那能不能有一种方法,统一部署Spring Cloud 中的各个微服务的配置呢?这就是Spring Cloud Config。 Spring Cloud Config 是一种用来动态获取Git、SVN、本地的配置文件的一种工具。
9.1.Config Server基本使用
1、创建一个项目,futurecloud-config-server,引入依赖spring-cloud-config-server
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--引入spring cloud config server依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
<version>2.1.1.RELEASE</version>
</dependency>
注意: 之前我们一般都是用的各种starter,而这个config server不是spring-cloud-starter-config-server 而是spring-cloud-config-server
2、在spring boot application 主类中添加Config Server的注解@EnableConfigServer,开启Config Server
@SpringBootApplication
@EnableConfigServer
public class FutruecloudConfigServerApplication
{
public static void main( String[] args )
{
SpringApplication.run(FutruecloudConfigServerApplication.class);
}
}
3、创建一个远程仓库 我使用的是码云,在码云上创建一个仓库,地址为: https://gitee.com/makyan/futurecloud-config
4、配置Config Server,application.yml配置如下:
server:
port: 11000 #程序启动端口,也就是tomcat的端口
spring:
application:
name: futurecloud-config-server #应用名称,别名
cloud:
config:
server:
git:
uri: https://gitee.com/makyan/futurecloud-config #git项目的uri
search-paths: config-v1 #在uri地址下查找的路径名
#访问仓库的用户名/密码,不配置也能访问
username: username
password: password
5、在gitee的futurecloud-config下创建一个目录(文件夹),config-v1, 在这个下面加入几个测试用的配置文件,这里加上五个测试文件,分别如下:
futurecloud.yml
futurecloud-dev.yml
futurecloud-test.yml
futurecloud-pre.yml
futurecloud-stable.yml
futurecloud-apigetway-zuul.yml
6、启动futurecloud-config-server 项目进行测试
访问:http://localhost:11000/futurecloud-pre.yml , 返回gittee上futurecloud-pre.yml文件的内容,其他配置文件也一样。 访问:http://localhost:11000/futurecloud-apigetway-zuul.yml ,返回如下图所示:
访问默认:http://localhost:11000/futurecloud/default,返回如下图所示:
9.2.Config Server 配置规则详解
在上面,我们用于测试的配置文件:
futurecloud.yml
futurecloud-dev.yml
futurecloud-test.yml
futurecloud-pre.yml
futurecloud-stable.yml
futurecloud-apigetway-zuul.yml
“-”前面的部分可以随便定义,一般我们用应用名来定义,后面的deb、test…也可以随便定义,一般我们用项目所处的环境来命名。 Config 支持我们使用的请求的参数规则为:
/ { 应用名 } / { 环境名 } [ / { 分支名 } ]
/ { 应用名 } - { 环境名 }.yml
/ { 应用名 } - { 环境名 }.properties
/ { 分支名 } / { 应用名 } - { 环境名 }.yml
/ { 分支名 } / { 应用名 } - { 环境名 }.properties
注意:
- 第一个规则的分支名是可以省略的,默认是master分支
- 无论你的配置文件是properties,还是yml,只要是应用名+环境名能匹配到这个配置文件,那么就能取到
- 如果是想直接定位到没有写环境名的默认配置,那么就可以使用default去匹配没有环境名的配置文件
- 使用第一个规则会匹配到默认配置
- 如果直接使用应用名来匹配,会出现404错误,此时可以加上分支名匹配到默认配置文件
- 如果配置文件的命名由很多个-分隔,此时直接使用这个文件名去匹配的话,会出现直接将内容以源配置文件内容直接返回,内容前可能会有默认配置文件的内容。