spring cloud consul config小demo遇到的问题

最近公司想让我看看微服务html

正好我也想看看新东西,每天解决业务问题。。。太没有激情了。。。并且咱们大多应用都仍是springmvcspringboot的应用都不多,只有几个,唉,我也是深陷业务问题中spring

Spring Cloud也算是一个全家桶吧,里面东西也多,不过从感受开箱即用的原则来看,用起来也比较顺手,demo也都很好搭建,
从开始的网关+服务的着手,网关我采用的Zuul,服务治理采用的eureka,后面想用spring cloud config做为配置中心,可是还要本身搭一个server非常麻烦。。。我也懒。。。无心听同事说,其实全家桶里服务治理能够用spring cloud consul,而consul就自带一个配置功能,因而我去了解了spring cloud consul config
spring cloud consul config自己依赖spring cloud consulagent server,因此只要agent server启动了,其实就至关于有了一个server来作配置,我满心欢喜的把服务治理eureka改成spring cloud consul,嗖嗖两下,spring cloud consul也配置好了
命令行里执行了,启动测试模式的agent server数据库

consul agent -dev

打开localhost:8500, 很明显有了一个相似配置中心的菜单bootstrap

clipboard.png

点开进去啥也没有。。。只有右边一个建立按钮springboot

clipboard.png

也没灰心,我先是去官网介绍看了看 官网连接描述mvc

clipboard.png

我认可我英语是差了。。。看了半天,我真是没看明白怎么使用。。。当时我有点懵逼,说好的很好操做的呢
没办法,我只有去百度了哈,看了不少文章,基本全部文章说的都是差不太多,可是这个差不太多又都没有说清楚到底怎么玩。。。
好吧,这个时候我有点认可我本身理解能力有点问题了,心想既然你们都没有说清楚,估计应该就是很容易理解,因此你们心领神会,我又反复读了哈官方的描述,而且找了springcloud.cc里的中文说明文档,仍是没看太懂。。。app

clipboard.png

当时我真的以为有点懵了。。。心想今天算了仍是不想这个,明天再想,因而我去把demo的网关换成了spring cloud gateway,这个基本没有半个小时就搞定了,仍是比较简单的spring-boot

次日也就是今天,我再次来看了哈文档,百度的几篇文章除了说明了一点,要加一个配置文件bootstrap.yml,这里面要去指定一些spring cloud consul config的一些配置,而且意思感受是application.yml里的配置均可以不用写了,彻底维护在spring cloud consul config里,可是spring cloud consul config到底在哪,我仍是没法把须要配置的属性,application.ymlconsul agent里刚一片空白的配置页面,这三者联系起来微服务

终于无心中,我发现有一篇文章的一句话让我警醒了。。。他不是像其余文章说一些貌似你们都懂的话,而是很是郑重了说了一句测试

clipboard.png

感受这难道也是一个理解能力和我差很少,可是比我强的人么。。。他这么一句让我明白,确实官网说的也不太明白,最后那句体会一下,我再去反复看了文章,和本身试验。。。

终于懂了。。。

懂了以后再回过头来看,spring cloud consul config仍是真的真的很是简单的。。。其实就是想要用spring cloud consul config,你要和它的一些约定或者说它的规范匹配起就完事了,剩下就跟普通的配置文件同样了,接下来我用我本身的理解来讲明哈spring cloud consul config怎么使用,固然前提你对于服务治理consul有点点了解哈

spring cloud consul config其实就是一个服务的配置中心,配置统一管理的地方,你哪一个服务须要这个配置中心,你就在那个服务里加上依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-consul-config</artifactId>
</dependency>

以后在该服务的resources目录下新增一个bootstrap.yml文件,里面加上这些就够了

spring:
  cloud:
    consul:
      config:
        format: yaml
        default-context: gateway

format默认是key_value的形式,可是我如今很喜欢用yaml形式的配置文件,default-context根据你的应用取吧,相似与spring.application.name属性同样,区分服务的

完事以后,在consul agent刚那个页面里建立一个目录,对,是目录,目录名必定要像这样config/gateway/data

clipboard.png

也就是configdata目录都是默认值,你没有配置的时候,就不用管,可是你必须这么写,中间那个gateway就是刚那个 default-context,这样consul agent页面和bootstrap.xml就映射起来了,接下来你就能够在下面的value里像yaml文件一下写配置了

clipboard.png

固然你想改目录的两个默认值,你就能够这么修改了,对应prefixdata-key,把默认值写出来就一眼清楚了

spring:
  cloud:
    consul:
      config:
        format: yaml
        default-context: gateway
        prefix: config
        data-key: data

因此仍是简单的,固然还有个问题,要是多个环境的不一样配置怎么来的,嘿嘿,这是个关键问题,由于这个处理,让我实在没有想到,通常咱们不用配置中心的时候,在工程里配置,能够按照application-test.ymlapplication-prod.yml来区分环境,这个spring cloud consul config也是能够的,不过不是建立config/gateway/data/test,亦或是config/gateway/data/prod这种。。。天真

特么居然是config/gateway,test/dataconfig/gateway,data/data,没错,你没有看错,服务名和环境中间用逗号分开。。。

并且这个中间分隔符逗号仍是支持可配。。。默认是逗号。。。你还能够用属性profile-separator进行修改

spring:
  cloud:
    consul:
      config:
        format: yaml
        default-context: gateway
        prefix: config
        data-key: data
        profile-separator: ','

可能我是一个比较传统的程序猿。。。这种逗号分开的目录命名方式对我来讲仍是有点冲击的。。。再回过头看官方的文档,也算是有点明白了。。。真的仍是个人理解能力太差

clipboard.png

总得来讲也是怪本身太着急了。。。以前几个开箱即用的把本身搞的浮躁了点。。其实仔细看文档仍是能看明白的。。。

最后你能够像日常写配置文件一下,这么根据环境来配置了

clipboard.png

总结哈:戒骄戒躁吧。。。

----------------------------------------------------------------------华丽的分割线------------------------------------

这里简单说哈@FengSufeier 的疑问,从你提到

clipboard.png

因此估计你多是自学尚未走入正式的工做场景中吧,我能够给你举个例子,在咱们平常开发过程当中,好比你如今有一个系统,有一个项目工程代码,里面有数据库配置,你正式上线的环境确定有一个数据库的地址,你测试环境也会有一个数据库的地址,两个确定不同,否则现网数据和测试数据混在一块儿,或者有关联的话,测试环境数据库被测挂了,那现网数据库也就遭殃了,因此通常是分开的,这也就分了两个环境,可是代码是一份,数据库配置是分两份的,如何控制?

这个时候,咱们通常就是把以前的一个配置文件application.yml分为application-test.ymlapplication-prod.yml两份,而这application-test.ymlapplication-prod.yml这两个文件去配置不一样环境的数据库,固然这里叫testprod,你也能够叫其余名字,只是一个叫法,而后在启动的时候,添加虚拟机的启动参数(VM options):-Dspring.profiles.active=test,也就是告诉SpringBoot你须要执行哪一个配置环境的配置文件

clipboard.png

这一点在boot说明文档里有提到,同时指定环境的配置文件执行时会把application.yml中的配置覆盖掉
clipboard.png

这样也很好,好比你有3个配置文件application.ymlapplication-test.yml,application-prod.yml,你能够把不一样环境的配置放入后两个文件,可是一些公共的业务属性配置,不区分环境的配置就能够放到application.yml

以上回答了你的devtest的用途,用法是什么,总结一下

  1. devtest就是不一样环境的名字,怎么取看你
  2. 为何要这么作,就是实际开发中有一些配置必需要分两份,或更多份以示区分,同一个项目要在不一样配置下运行
  3. 怎么用,其实就是根据你的要求按照application-{profile}.yml的方式区分配置,而后启动的时候添加-Dspring.profiles.active=test来指定你要运行的环境

可是说了这么多,并无说到任何Consul Config,对,由于本质就是两个问题,Spring Cloud Consul Config自己是为了解决多系统,多应用的配置管理问题,它是统一管理配置的地方,而且能够作到动态刷新

结合以前说到的多环境须要配置不一样的配置文件,那既然如今要把全部配置都放到Consul Config上作统一管理,那其实Consul Config也要支持多环境了,因此才有config/gateway,dev/data这样的写法,只是Consul Config的一个规定,以便支持多环境而已

至于你提到了修改为了config/gateway,dev/data以后的配置不起做用了,按照刚才说的,如今配置已经在Consul Config上了,你的config/gateway,dev/data里的配置就至关于之前application-dev.yml里的配置,按照boot对于多环境的支持要起做用,第一你要有多环境的配置文件,你有了config/gateway,dev/data,第二你启动的时候加了-Dspring.profiles.active=dev参数么?由于你还要指定此时的运行环境,若是你不指定,那只有config/gateway/data里的配置会生效嘛

但愿这样的解释对你有帮助哈~

相关文章
相关标签/搜索