16、Spring Cloud16——Spring Colud Config之客户端配置

上一篇搭建了分布式配置中心服务端,现在我们来学习如何在客户端使用它吧。

首先创建一个名为config-client1的新的Module客户端并且添加如下依赖:
在这里插入图片描述在resources下新建一个名为bootstrap.properties(或者bootstrap.yaml都可以)的配置文件:

#取名字必须和仓库中文件夹的名字一致
spring.application.name=client1
#要去config-server中加载的环境
spring.cloud.config.profile=dev
#要加载的分支
spring.cloud.config.label=master
#config-server的地址
spring.cloud.config.uri=http://localhost:7000/
#自己的端口号
server.port=2008

注意:bootstrap.properties和application.properties实际上都是spring boot中的配置文件,不同的是bootstrap.properties的加载时机要比application.properties早。由于这里这里一会儿要从config-server上面去获取数据,所以需要使用bootstrap.properties去加载数据,如果使用application.properties加载数据的话,那时候容器已经启动好了,再去加载的话已经来不及了,启动的时候就会报错。所以一般远程加载数据,我们都是用bootstrap.properties加载

这样就可以拿到config-server中的数据了,然后我们可以使用这些数据。

然后创建一个HelloController:

@RestController
@RefreshScope   //刷新spring容器
public class HelloController {
    //把从配置文件中加载到的sp注入到这里
    @Value("${sp}")
    String sp;
    @GetMapping("/hello")
    public String hello(){
        return sp ;
    }
}

启动后运行结果如下:
在这里插入图片描述如果要切换到其他环境,只需要在配置文件中的spring.cloud.config.profile中修改即可,这里就是根据

spring.application.name=client1
spring.cloud.config.profile=prod
spring.cloud.config.label=master

这三个的路径来锁定一个配置文件,而config-server中的配置(见上篇),只是告诉你要去client1这个配置文件中去查找而已,并没有说要去查找这里面的哪个文件。

接下来我们来看看服务端配置细节

我们先通过下面一张图来看看Config Server的一个大致工作过程:

1.首先我们需要一个远程的Git仓库,自己学习可以直接用GitHub,在在实际生产环境中,需要自己搭建一个Git服务器,远程Git仓库的作用主要是用来保存我们的配置文件
2.除了远程Git仓库之外,我们还需要一个本地Git仓库,每当Config Server访问远程Git仓库时,都会保存一份到本地,这样当远程仓库无法连接时,就直接使用本地存储的配置信息
3.例如有微服务A、微服务B作为是我们具体的应用,这些应用在启动的时候会从Config Server中来加载相应的配置信息
4.当微服务A/B尝试去从Config Server中加载配置信息的时候,Config Server会先通过git clone命令克隆一份配置文件保存到本地
5.使用了给i他仓库还有一个好处是,这个配置文件的版本可追踪,不用担心改坏了,改失败了找不到之前的了,可以随时做版本回退。

下面来思考这样一个问题,config-server应该只有一个,当然,你也可以集群化部署。然后config-client可能有成百上千个,因为每一个微服务就是一个config-client,那么如果每一个微服务都有一个配置文件保存在GitHub上面,那么当这些config-server连接上config-server时,config-server怎么知道去拿哪个配置文件呢?这时候就涉及到占位符的使用。

使用占位符可以非常灵活的去从config-client里面去定位我要访问哪一个文件。Spring Cloud Config中主要有三种占位符,分别是{application}、{profile}、{label},这些占位符除了用来辨识配置文件的规则,还可以用在config-server中,对Git仓库的URL配置,用在URL配置中时,这三个占位符的含义分别如下:

1.{application}映射到客户端的 spring.application.name
2.{profile}映射到客户端上的 spring.profiles.active
3.{label}这是一个服务器端功能,标记”版本”的配置文件集

把我们的config-server中的配置文件给成如下:

spring.application.name=config-server
server.port=7000
#配置文件在git仓库中的位置
spring.cloud.config.server.git.uri=https://github.com/shuping1234/sp.git
#目录的名字
spring.cloud.config.server.git.search-paths={application}
#仓库的用户名
spring.cloud.config.server.git.username=2660458064@qq.com
#仓库的密码
spring.cloud.config.server.git.password=shuping1996

然后重启后在浏览器访问,一样能够拿到prod,说明前面的配置是没有问题的:
在这里插入图片描述
然后还记得上一篇我们知道,config-server克隆下来的文件保存在C:\Users<当前用户>\AppData\Local\Temp目录下(实际上这个配置文件也支持本地文件,可以在本地提前把配置文件写好,直接在config-server上面加载本地的配置文件,但是这种方便比较少见),我们可以通过如下配置来修改:

spring.cloud.config.server.git.basedir=E:\\111\\

安全保护
开发环境中我们的配置中心肯定是不能随随便便被人访问的,我们可以加上适当的保护机制,由于微服务是构建在Spring Boot之上,所以整合Spring Security是最方便的方式。

首先在config-server的配置文件中添加依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

Spring Security由于同属于spring家族的,可以无缝衔接,所以使用起来非常的方便,只要加入依赖,所有的接口都会被保护起来,必须要登录才能访问。

然后启动项目,我们发现,此时如果想要再去访问http://localhost:7000/client1/dev/master这个接口,就会要求先登录:
在这里插入图片描述默认的用户名就是user,密码就是项目启动时,控制台打印出来的一串数据:
在这里插入图片描述登陆后就可以访问原来的接口了
在这里插入图片描述也可以自己设置账号密码在config-server的application.properties配置文件中添加如下代码:

spring.security.user.name=sp
spring.security.user.password=123

这样的话其实相当于写死了,以后在config-client中就用这个用户名和密码来访问。

然后在config-client1 bootstrap.properties配置文件中加上如下代码即可:

spring.cloud.config.username=sp
spring.cloud.config.password=123

这样的话以后没有账号密码就无法访问config-server的值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值