Spring Cloud学习笔记【六】Config 配置中心Service的使用与详解

         Spring Cloud学习笔记【六】Config 配置中心Service的使用与详解

1、产生前提

配置文件是我们再熟悉不过的了,尤其是 Spring Boot 项目,除了引入相应的 maven 包之外,剩下的工作就是完善配置文件了,例如 mysql、redis 、security 相关的配置。除了项目运行的基础配置之外,还有一些配置是与我们业务有关系的,比如说七牛存储、短信相关、邮件相关,或者一些业务上的开关。

我们一般都是直接把相关配置放在单独的配置文件中,以 properties 或者 yml 的格式出现,更省事儿的方式是直接放到 application.properties 或 application.yml 中。但是这样的方式有个明显的问题,那就是,当修改了配置之后,必须重启服务,否则配置无法生效。

目前有一些用的比较多的开源的配置中心,比如携程的 Apollo、蚂蚁金服的 disconf , Spring Cloud Config等等。

2、git仓库

可以新建一个spring-cloud-config的仓库,并创建一个release的分支版本,便于测试!!!

使用 git作为配置存储,除了 git 外,还可以用数据库、svn、本地文件等作为存储。

3、编码实现

SpringBoot采用2.2.2.RELEASE的最新版本,SpringCloud采用Hoxton.SR1的最新版本如果是使用的gradle进行构建,版本也采用高的版本,不然构建会出错的。引入依赖关系

 implementation 'org.springframework.cloud:spring-cloud-config-server'
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-config-server</artifactId>
</dependency>

 添加注解@EnableConfigServer

@SpringBootApplication
@EnableEurekaClient
@EnableConfigServer
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

配置项目信息和git仓库信息

#服务端口
server.port=9008
#项目名称
spring.application.name=CONFIG
#往配置中心添加服务的地址
eureka.client.service-url.defaultZone:http://localhost:8761/eureka/
# git仓库地址(项目地址,直接复制链接但要去除.git就行)
spring.cloud.config.server.git.uri=http://192.168.3.6:3000/laihx/spring-cloud-config
# git仓库地址下的相对搜索地址(可用使用通配符),可以配置多个,用分割,可以{application}实现按应用查配置
spring.cloud.config.server.git.search-paths=config
# git仓库的账号(公开仓库无需账号信息)
[email protected]
# git仓库的密码(公开仓库无需账号信息)
spring.cloud.config.server.git.password=laihx123456
#git默认分支
spring.cloud.config.server.git.default-label=master
#日志配置(详细日志,便于观察)
logging.level.web=trace

 4、配置webhooks,即为web钩子!git的pub_key一般在C:\Users\admin\.ssh的位置!

5、测试

Spring Cloud Config 有它的一套访问规则,我们在日志中就可以详细的看出访问规则,我们通过这套规则在浏览器上直接访问就可以。

{GET /{name}-{profiles}.properties}: properties(String,String,boolean)
{GET [/{name}-{profiles}.yml, /{name}-{profiles}.yaml]}: yaml(String,String,boolean)
{GET /{name}/{profiles:.*[^-].*}, produces [application/json]}: defaultLabel(String,String)
{GET [/{label}/{name}-{profiles}.yml, /{label}/{name}-{profiles}.yaml]}: labelledYaml(String,String,String,boolean)
{GET /{name}/{profiles}/{label:.*}, produces [application/json]}: labelled(String,String,String)
{GET /{name}-{profiles}.json}: jsonProperties(String,String,boolean)
{GET /{label}/{name}-{profiles}.json}: labelledJsonProperties(String,String,String,boolean)
{GET /{label}/{name}-{profiles}.properties}: labelledProperties(String,String,String,boolean)
{GET /{name}/{profiles:.*[^-].*}, produces [application/vnd.spring-cloud.config-server.v2+json]}: defaultLabelIncludeOrigin(String,String)
{GET /{name}/{profiles}/{label:.*}, produces [application/vnd.spring-cloud.config-server.v2+json]}: labelledIncludeOrigin(String,String,String)

{application} 就是应用名称,对应到配置文件上来,就是配置文件的名称部分,例如我上面创建的配置文件,在git创建的文件前缀。

{profile} 就是配置文件的版本,我们的项目有开发版本、测试环境版本、生产环境版本,对应到配置文件上来就是以 application-{profile}.yml 加以区分,例如application-dev.yml、application-sit.yml、application-prod.yml。

{label} 表示 git 分支,默认是 master 分支,如果项目是以分支做区分也是可以的,那就可以通过不同的 label 来控制访问不同的配置文件了。

a、根据这三条规则,我们可以通过以下地址查看配置文件内容:

http://localhost:9008/config/dev/master

http://localhost:9008/config-dev.yml

http://localhost:9008/master/config-dev.yml

b、改变查询分支

http://localhost:9008/release/config-dev.yml

为什么会多出红色的东西出来?

是因为config-dev.yml会自动合并config.yml里面的内容,如果相同,获取config-dev.yml的内容,如果有多出来的,会进行合并,这个对于不同环境的相同配置就非常的又好了,只需要统一去配置相同项就行了!

改变获取文件的格式也是可以的 

http://localhost:9008/master/config-dev.json

http://localhost:9008/master/config-dev.properties

6、文件保存路径

从日志里面可以看出来,config-service会自动拉起文件进行下载到默认文件下!但在生成环境的中,这样是非常的不安全的,需要保存到指定的有权限操作的文件夹才行!

#文件拉取的保存路径
spring.cloud.config.server.git.basedir=E:/basedir

发布了71 篇原创文章 · 获赞 31 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/BThinker/article/details/103905692