我们开发过程中,要经历本地开发环境、dev开发环境、qa测试环境、(甚至还有uat演示环境)、生产环境。
那么我们就需要将服务做多环境处理。我们现在使用都是spring boot架构,它可以根据配置文件的配置去匹配子文件后缀,不过在Spring cloud环境下使用了nacos作为配置中心需要使用bootstrap.yml替换 appliation,yml作为配置文件。因为bootstrap的加载是在application的前面。这样可以显去抓线上配置文件。如果使用application作为配置文件就无法使用配置中心了。
spring:
profiles:
active: wm
这里使用active指定子bootstrap配置文件的后缀,比如:
这里就将bootstrap的多环境配置隔离到了不同环境文件中。
所以我们只需要在子配置文件中配置nacos的多环境即可。例如:
spring:
cloud:
nacos:
config:
enabled: true
server-addr: ${codingfly.nacos.dev.server-addr}
file-extension: yml
group:
encode: UTF-8
namespace: ${codingfly.nacos.dev.namespace}
discovery:
server-addr: ${codingfly.nacos.dev.server-addr}
namespace: ${codingfly.nacos.dev.namespace}
这里我们自己做了一个自己的环境配置,将各个环境的配置抽离成一个变量,然后统一在bootstrap中配置。
到此简单的多环境已经完成。但是有一个问题,项目组开发人员水平参差不齐,而且每个人去配置自己的nacos总local环境开发也不现实。这里就需要整个组配置一个nacos进行开发调试。但是如果大家都注册到一个nacos,那么一个服务就会有多个副本。自动被ribbon进行进程内负载均衡。不能保证每次调用都是自己的服务。那么怎么办呢?
其实既然是用了nacos,就可以配合使用其自带的namespace进行环境隔离,每个人去申请自己的namespace,然后将服务注册和配置注册时的namespace配置上。这样需要联调的两个人就可以使用一个namespace,做到各组开发互不干扰。
这样就实现了在单nacos环境下的多环境配置及多nacos环境下的多环境配置。同时使用,效果更好,比如我们本地local环境使用单nacos的多namespace观猎。及dev/qa共用一个nacos的多namespace管理以及生产的单nacos配置。
其实掌握了根本之后这里面还有诸多细节需要去根据需求掌控。这就需要根据自己的掌握情况一点点去调整了。
还有本地开发时,每个人都有自己的namespace,所以bootsrap根文件都会配置自己的active及codingfly配置。每次git提交更新会有一些繁琐。其实这个问题也很简单,我们可以使用idea提供的缓存功能。将我们自己的配置文件缓存起来。
然后就可以在
找到他们。每个更新代码时,将defalut中的配置文件还原。即可。更新代码后,从缓存区还原。