前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何实现根据环境切换不同配置?

如何实现根据环境切换不同配置?

作者头像
编程大道
发布2023-03-17 12:38:12
5980
发布2023-03-17 12:38:12
举报
文章被收录于专栏:编程大道编程大道
在企业开发中,系统的配置信息往往会分不同的环境,如开发环境、测试环境、生产环境。当我们使用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:

代码语言:javascript
复制
server:
  #取不同环境下配置的端口
  port: @serverPort@
#spring配置
spring:
  profiles:
    #取不同环境下配置的激活项
    active: @profileActive@
  application:
	#取不同环境下配置的项目名称
    name: @projectActiveName@

如下,把需要随环境变化的配置放到当前环境配置文件,比如dev环境,我们创建bootstrap-dev.yml文件:

代码语言:javascript
复制
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@

如上通过@取值的方式,如@nacosNamespace@是取pom.xml文件中的配置,我们在下面profile中定义相关配置。通过@获取pom.xml中配置,默认是不支持的,需要在pom.xml中添加以下配置:

代码语言:javascript
复制
<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:

代码语言:javascript
复制
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@

pom.xml文件中增加profile配置:

代码语言:javascript
复制
<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中激活配置方式:

这样就能实现不手动修改配置的情况下切换环境了,赶快试试吧~


往期文章推荐

大坑!隐式转换导致索引失效...

高性能分布式限流:Redis+Lua真香!

MySQL索引知识点&常见问题汇总

etcd的应用场景

etcd和Zookeeper孰优孰劣?

联合索引在B+树上的存储结构及数据查找方式

Redis分布式锁实战

Mybatis第三方PageHelper插件分页原理

MySQL索引底层原理

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-01-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 BiggerBoy 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
微服务引擎 TSE
微服务引擎(Tencent Cloud Service Engine)提供开箱即用的云上全场景微服务解决方案。支持开源增强的云原生注册配置中心(Zookeeper、Nacos 和 Apollo),北极星网格(腾讯自研并开源的 PolarisMesh)、云原生 API 网关(Kong)以及微服务应用托管的弹性微服务平台。微服务引擎完全兼容开源版本的使用方式,在功能、可用性和可运维性等多个方面进行增强。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档