如何实现根据环境切换不同配置?
隐藏
首发于公众号:BiggerBoy
前言
在企业开发中,系统的配置信息往往会分不同的环境,如开发环境、测试环境、生产环境。当我们使用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: #注册中心采用nacos nacos: #注册中心 discovery: enabled: true server-addr: nacos.dev.biggerboy.com:8848 group: dev # 需要配置完后,使用每个项目自身namespace namespace: @nacosNamespace@ service: ${spring.application.name} #配置中心 config: file-extension: yaml server-addr: nacos.dev.biggerboy.com:8848 group: dev prefix: ${spring.application.name} # 需要配置完后,使用每个项目自身namespace namespace: @nacosNamespace@
pom文件添加支持
如上通过@取值的方式,如@nacosNamespace@是取pom.xml文件中的配置,我们在下面profile中定义相关配置。通过@获取pom.xml中配置,默认是不支持的,需要在pom.xml中添加以下配置:
<build> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> </resource> </resources> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <version>3.2.0</version> <configuration> <encoding>UTF-8</encoding> <delimiters> <delimiter>@</delimiter> </delimiters> <useDefaultDelimiters>false</useDefaultDelimiters> </configuration> </plugin> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
创建线上环境配置文件:
然后我们再创建一个正式环境的配置文件,命名为bootstrap-prod.yml:
spring: cloud: #注册中心采用nacos nacos: #注册中心 discovery: enabled: true server-addr: nacos.biggerboy.com:8848 group: prod # 需要配置完后,使用每个项目自身namespace namespace: @nacosNamespace@ service: ${spring.application.name} #配置中心 config: file-extension: yaml server-addr: nacos.biggerboy.com:8848 group: prod prefix: ${spring.application.name} # 需要配置完后,使用每个项目自身namespace namespace: @nacosNamespace@
profile配置:
pom.xml文件中增加profile配置:
<profiles> <profile> <id>dev</id> <properties> <profileActive>dev</profileActive> <nacosNamespace>dev</nacosNamespace> <projectActiveName>order-service</projectActiveName> <serverPort>80</serverPort> </properties> <activation> <activeByDefault>false</activeByDefault> </activation> </profile> <profile> <id>test</id> <properties> <profileActive>test</profileActive> <nacosNamespace>test</nacosNamespace> <projectActiveName>order-service</projectActiveName> <serverPort>80</serverPort> </properties> <activation> <activeByDefault>false</activeByDefault> </activation> </profile> <profile> <id>prod</id> <properties> <profileActive>prod</profileActive> <nacosNamespace>prod</nacosNamespace> <projectActiveName>order-service</projectActiveName> <serverPort>8080</serverPort> </properties> <activation> <activeByDefault>true</activeByDefault> </activation> </profile> </profiles>
激活方式
打包时激活配置:
使用maven打包时,可通过-Pdev指定激活某个配置
mvn clean install -Pdev -DskipTests=true
idea中激活配置方式:
这样就能实现不手动修改配置的情况下切换环境了,赶快试试吧~
如果对你有帮助记得点个推荐,分享给你的朋友。
说的再好,不如行动。不怕慢,就怕站。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?