前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >这波啊~这波是多环境配置

这波啊~这波是多环境配置

作者头像
java技术爱好者
发布2021-11-19 16:03:28
4470
发布2021-11-19 16:03:28
举报
文章被收录于专栏:java技术爱好者java技术爱好者

文章已收录到我的Github精选,欢迎Star:https://github.com/yehongzhi/learningSummary

前言

一般来说,在日常开发中都会分多个环境,比如git代码分支会分为dev(开发)、release(测试)、pord(生产)等多个环境。可以说每个环境对应的配置信息(比如数据库、缓存、消息队列MQ等)都不相同。因此不同的环境肯定需要对应不同的配置文件。接下来学习一下怎么配置多环境的配置文件。

SpringBoot多环境配置

因为SpringBoot做多环境配置比较简单,而且现在大部分项目基本都会使用SpringBoot,所以这里就介绍怎么用SpringBoot做多环境配置。

单文件版本

单文件在实际中使用得并不多,不过也可以实现多环境配置,这里简单介绍一下。以application.yml配置文件举例,你要在一个配置文件里面配置多个环境的配置,肯定需要分割线将其隔开,所以SpringBoot就规定了使用---进行隔开每个环境。

代码语言:javascript
复制
spring:
  application:
    name: mydemo
  profiles:
    active: prod # 选择prod环境配置
#整合mybatis
mybatis-plus:
  mapper-locations: classpath:mapper/*Mapper.xml
  type-aliases-package: com.yehongzhi.mydemo.model
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
---
# 开发环境
server:
  port: 8080
spring:
  profiles: dev
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://DEV_IP:3306/user?createDatabaseIfNotExist=true
    username: root
    password: 123456
---
# 测试环境
server:
  port: 8090
spring:
  profiles: release
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://RELEASE_IP:3306/user?createDatabaseIfNotExist=true
    username: root
    password: 123456
---
# 生产环境
server:
  port: 8888
spring:
  profiles: prod
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://PROD_IP:3306/user?createDatabaseIfNotExist=true
    username: root
    password: 123456

单文件配置多环境的缺点很明显,就是会导致这个application.yml文件非常大,不够清晰。最好是一个环境单独一个文件,这样就清晰很多。于是乎就有了多文件版本。

多文件版本

一般SpringBoot的配置文件都是叫application.yml或者application.properties,这里用application.yml举例,配置多环境配置文件,文件名需要满足这样的格式:application-{profile}.yml。看下图就明白了。

换而言之,dev环境的配置文件就叫做application-dev.yml,那么怎么选择哪个环境的配置文件呢,其实很简单,只需要在application.yml加上如下配置:

代码语言:javascript
复制
spring:
  profiles:
    active: dev

这就表示选择加载application-dev.yml文件,何以见得?

一般在启动完成之后,我们可以在控制台搜索关键字profiles找到对应的环境。

所以我们就可以在application.yml里面,通过spring.profiles.active切换不同的环境。这就是多文件版本。

但是我们在平时开发时发现,这个配置要经常改来改去,非常麻烦,有没有不用改这个配置就可以切换的方法呢?当然有。

首先在pom.xml文件增加以下环境变量的配置。

代码语言:javascript
复制
<profiles>
    <profile><!-- 开发环境 -->
        <id>dev</id>
        <properties>
            <profiles.active>dev</profiles.active>
        </properties>
    </profile>
    <profile><!-- 测试环境 -->
        <id>release</id>
        <properties>
            <profiles.active>release</profiles.active>
        </properties>
    </profile>
    <profile><!-- 生产环境 -->
        <id>prod</id>
        <properties>
            <profiles.active>prod</profiles.active>
        </properties>
    </profile>
</profiles>

接着在application.yml配置文件中使用@profiles.active@来配置环境变量。

代码语言:javascript
复制
spring:
  profiles:
    active: '@profiles.active@'

接着刷新Maven,可以在IDEA右侧中选择对应的环境,如下图:

当需要切换环境时,就不需要改配置文件的内容,只需要勾选对应的环境即可,就方便很多。

结合Nacos配置中心

一般在项目开发中,都需要配置信息能够在运行时更改配置,于是乎就有了配置中心的概念。配置中心当然也有多环境的配置。

在Nacos配置中心就有命名空间的概念,我们可以使用命名空间来实现多环境配置。首先引入Maven依赖:

代码语言:javascript
复制
<dependencies>
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        <version>2.0.2.RELEASE</version>
    </dependency>
</dependencies>
<profiles>
    <profile>
        <id>dev</id>
        <properties>
            <profiles.active>dev</profiles.active>
        </properties>
    </profile>
    <profile>
        <id>release</id>
        <properties>
            <profiles.active>release</profiles.active>
        </properties>
    </profile>
    <profile>
        <id>prod</id>
        <properties>
            <profiles.active>prod</profiles.active>
        </properties>
    </profile>
</profiles>

第二步,启动Nacos,然后在创建对应的命名空间和配置文件。

第三步,在项目中增加bootstrap.yml文件。

代码语言:javascript
复制
spring:
  application:
    name: mydemo
  profiles:
    active: '@profiles.active@'
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848
        file-extension: yaml
        group: DEFAULT_GROUP
        namespace: a4a33d52-371b-451a-a3c1-d01c1d343331 #dev命名空间的ID
        enabled: true
        prefix: ${spring.application.name}
        refresh-enabled: true

在IDEA配置项目启动时设置环境变量。

这样就完成了,启动项目,就可以读到Nacos配置中心的dev命名空间的mydemo-dev.yaml文件。

因为DataId的定义规则是{prefix}-{spring.profiles.active}.

prefix默认规则是获取${spring.application.name}的值。可以通过spring.cloud.nacos.config.prefix进行配置。 spring.profiles.active即为当前环境对应的profile。可以通过spring.profiles.active进行配置。 file-extension为配置文件的数据格式。可以通过spring.cloud.nacos.config.file-extension进行配置。

总结

以上就是多环境配置的三种方式,多环境配置基本上是创建新项目的基本操作,所以掌握多环境配置还是很有必要的。感谢大家的阅读,希望看完之后能对你有所收获。

觉得有用就点个赞吧,你的点赞是我创作的最大动力~

我是一个努力让大家记住的程序员。我们下期再见!!!

能力有限,如果有什么错误或者不当之处,请大家批评指正,一起学习交流!

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

本文分享自 java技术爱好者 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • SpringBoot多环境配置
    • 单文件版本
      • 多文件版本
        • 结合Nacos配置中心
        • 总结
        相关产品与服务
        对象存储
        对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档