在企业开发中,系统的配置信息往往会分不同的环境,如开发环境、测试环境、生产环境。当我们使用nacos做为配置中心时,一定会遇到的问题就是在应用中配置nacos的server-addr时测试环境的nacos地址和线上nacos地址如何区分的问题
拿开发环境和正式环境来说,比如开发环境的nacos地址是nacos.dev.biggerboy.com:8848,而正式环境是nacos.biggerboy.com:8848
当在开发环境开发完成准备上线时如何将nacos地址切换为正式环境呢?修改配置文件中server-addr值为nacos.biggerboy.com:8848吗?如果忘了修改呢?
这里提供一种方法,采用spring-boot多环境配置和maven profile配合完成环境的切换。
创建bootstrap.yml:
server:#取不同环境下配置的端口port: @serverPort@
#spring配置
spring:profiles:#取不同环境下配置的激活项active: @profileActive@application:#取不同环境下配置的项目名称name: @projectActiveName@
如下,把需要随环境变化的配置放到当前环境配置文件,比如dev环境,我们创建bootstrap-dev.yml文件:
spring:cloud:#注册中心采用nacosnacos:#注册中心discovery:enabled: trueserver-addr: nacos.dev.biggerboy.com:8848group: dev# 需要配置完后,使用每个项目自身namespacenamespace: @nacosNamespace@service: ${spring.application.name}#配置中心config:file-extension: yamlserver-addr: nacos.dev.biggerboy.com:8848group: devprefix: ${spring.application.name}# 需要配置完后,使用每个项目自身namespacenamespace: @nacosNamespace@
如上通过@取值的方式,如@nacosNamespace@是取pom.xml文件中的配置,我们在下面profile中定义相关配置。通过@获取pom.xml中配置,默认是不支持的,需要在pom.xml中添加以下配置:
src/main/resources true org.apache.maven.plugins maven-resources-plugin 3.2.0 UTF-8 @ false org.springframework.boot spring-boot-maven-plugin
然后我们再创建一个正式环境的配置文件,命名为bootstrap-prod.yml:
spring:cloud:#注册中心采用nacosnacos:#注册中心discovery:enabled: trueserver-addr: nacos.biggerboy.com:8848group: prod# 需要配置完后,使用每个项目自身namespacenamespace: @nacosNamespace@service: ${spring.application.name}#配置中心config:file-extension: yamlserver-addr: nacos.biggerboy.com:8848group: prodprefix: ${spring.application.name}# 需要配置完后,使用每个项目自身namespacenamespace: @nacosNamespace@
pom.xml文件中增加profile配置:
dev dev dev order-service 80 false test test test order-service 80 false prod prod prod order-service 8080 true
打包时激活配置:
使用maven打包时,可通过-Pdev指定激活某个配置
mvn clean install -Pdev -DskipTests=true
idea中激活配置方式:
下一篇:JUC面试(三)——CAS