持续原创输出,点击上方蓝字关注我

目录

  • 前言
  • Spring Boot 自带的多环境配置

    • 创建不同环境的配置文件
    • 指定运行的环境
  • Maven 的多环境配置

    • 创建多环境配置文件
    • 定义激活的变量
    • pom 文件中定义 profiles
    • 资源过滤
    • 总结
  • 总结

前言

日常开发中至少有三个环境,分别是开发环境(dev),测试环境(test),生产环境(prod)。

不同的环境的各种配置都不相同,比如数据库,端口,IP地址等信息。

那么这么多环境如何区分,如何打包呢?

本篇文章就来介绍一下Spring Boot 中多环境如何配置,如何打包。

Spring Boot 自带的多环境配置

Spring Boot 对多环境整合已经有了很好的支持,能够在打包,运行间自由切换环境。

那么如何配置呢?下面将会逐步介绍。

创建不同环境的配置文件

既然每个环境的配置都不相同,索性将不同环境的配置放在不同的配置文件中,因此需要创建三个不同的配置文件,分别是application-dev.propertiesapplication-test.propertiesapplication-prod.properties

「注意」:配置文件的名称一定要是application-name.properties或者application-name.yml格式。这个name可以自定义,主要用于区分。

此时整个项目中就有四个配置文件,加上application.properties

指定运行的环境

虽然你创建了各个环境的配置文件,但是Spring Boot 仍然不知道你要运行哪个环境,有以下两种方式指定:

配置文件中指定

application.properties或者application.yml文件中指定,内容如下:

# 指定运行环境为测试环境
spring.profiles.active=test

以上配置有什么作用呢?

如果没有指定运行的环境,Spring Boot 默认会加载application.properties文件,而这个的文件又告诉Spring Boot 去找test环境的配置文件。

运行 jar 的时候指定

Spring Boot 内置的环境切换能够在运行Jar包的时候指定环境,命令如下:

java -jar xxx.jar --spring.profiles.active=test

以上命令指定了运行的环境是test,是不是很方便呢?

Maven 的多环境配置

Maven本身也提供了对多环境的支持,不仅仅支持Spring Boot项目,只要是基于Maven的项目都可以配置。

Maven对于多环境的支持在功能方面更加强大,支持JDK版本资源文件操作系统等等因素来选择环境。

如何配置呢?下面逐一介绍。

创建多环境配置文件

创建不同环境的配置文件,分别是application-dev.propertiesapplication-test.propertiesapplication-prod.properties

加上默认的配置文件application.properties同样是四个配置文件。

定义激活的变量

需要将Maven激活的环境作用于Spring Boot,实际还是利用了spring.profiles.active这个属性,只是现在这个属性的取值将是取值于Maven。配置如下:

spring.profiles.active=@profile.active@

profile.active实际上就是一个变量,在maven打包的时候指定的-P test传入的就是值。

pom 文件中定义 profiles

需要在mavenpom.xml文件中定义不同环境的profile,如下:

<!--定义三种开发环境-->
    <profiles>
        <profile>
            <!--不同环境的唯一id-->
            <id>dev</id>
            <activation>
                <!--默认激活开发环境-->
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
                <!--profile.active对应application.yml中的@profile.active@-->
                <profile.active>dev</profile.active>
            </properties>
        </profile>

        <!--测试环境-->
        <profile>
            <id>test</id>
            <properties>
                <profile.active>test</profile.active>
            </properties>
        </profile>

        <!--生产环境-->
        <profile>
            <id>prod</id>
            <properties>
                <profile.active>prod</profile.active>
            </properties>
        </profile>
    </profiles>

标签<profile.active>正是对应着配置文件中的@profile.active@

<activeByDefault>标签指定了默认激活的环境,则是打包的时候不指定-P选项默认选择的环境。

以上配置完成后,将会在IDEA的右侧Maven选项卡中出现以下内容:


1

可以选择打包的环境,然后点击package即可。

或者在项目的根目录下用命令打包,不过需要使用-P指定环境,如下:

mvn clean package package -P test

maven中的profile的激活条件还可以根据jdk操作系统文件存在或者缺失来激活。这些内容都是在<activation>标签中配置,如下:

<!--activation用来指定激活方式,可以根据jdk环境,环境变量,文件的存在或缺失-->
  <activation>
       <!--配置默认激活-->
      <activeByDefault>true</activeByDefault>
                
      <!--通过jdk版本-->
      <!--当jdk环境版本为1.8时,此profile被激活-->
      <jdk>1.8</jdk>
      <!--当jdk环境版本1.8或以上时,此profile被激活-->
      <jdk>[1.8,)</jdk>

      <!--根据当前操作系统-->
      <os>
        <name>Windows XP</name>
        <family>Windows</family>
        <arch>x86</arch>
        <version>5.1.2600</version>
      </os>
  </activation>

资源过滤

如果你不配置这一步,将会在任何环境下打包都会带上全部的配置文件,但是我们可以配置只保留对应环境下的配置文件,这样安全性更高。

这一步配置很简单,只需要在pom.xml文件中指定<resource>过滤的条件即可,如下:

<build>
  <resources>
  <!--排除配置文件-->
    <resource>
      <directory>src/main/resources</directory>
      <!--先排除所有的配置文件-->
        <excludes>
          <!--使用通配符,当然可以定义多个exclude标签进行排除-->
          <exclude>application*.properties</exclude>
        </excludes>
    </resource>

    <!--根据激活条件引入打包所需的配置和文件-->
    <resource>
      <directory>src/main/resources</directory>
      <!--引入所需环境的配置文件-->
      <filtering>true</filtering>
      <includes>
        <include>application.yml</include>
          <!--根据maven选择环境导入配置文件-->
        <include>application-${profile.active}.yml</include>
      </includes>
    </resource>
  </resources>
</build>

上述配置主要分为两个方面,第一是先排除所有配置文件,第二是根据profile.active动态的引入配置文件。

总结

至此,Maven的多环境打包已经配置完成,相对来说挺简单,既可以在IDEA中选择环境打包,也同样支持命令-P指定环境打包。

总结

本文介绍了Spring Boot 的两种打包方式,每种方式有各自的优缺点,你更喜欢哪种呢?

源码已经上传,回复关键词多环境配置获取。

嗯,挺全乎儿的,Spring Boot 多环境配置都在这里了,你喜欢哪种?的更多相关文章

  1. SpringCloud入门之Spring Boot多环境配置切换指南

    在 spring boot 中,有两种配置文件,一种是application.properties,另一种是application.yml,两种都可以配置spring boot 项目中的一些变量的定义 ...

  2. 一分钟学会Spring Boot多环境配置切换

    一. 问题由来 开发环境.测试环境.生产环境--------我们的软件在不同的环境中,系统参数和配置可能会不一样,比如数据源配置.日志文件配置.以及一些软件运行过程中的基本配置,那每次我们将软件部署到 ...

  3. Spring Boot多环境配置

    在项目开发阶段,开发环境和实际生产环境是不一样,比如使用的数据库/服务连接配置等.因此,配置多个开发环境profile还是必要的 多环境的配置(yml)方式 配置其实很简单,在resource目录下, ...

  4. spring boot多环境配置 直接上代码

    spring:  profiles:    active: test  jackson:    date-format: yyyy-MM-dd HH:mm:ss  datasource:    dri ...

  5. Spring Boot的自动配置原理及启动流程源码分析

    概述 Spring Boot 应用目前应该是 Java 中用得最多的框架了吧.其中 Spring Boot 最具特点之一就是自动配置,基于Spring Boot 的自动配置,我们可以很快集成某个模块, ...

  6. 【转】spring boot application.properties 配置参数详情

    multipart multipart.enabled 开启上传支持(默认:true) multipart.file-size-threshold: 大于该值的文件会被写到磁盘上 multipart. ...

  7. Spring Boot核心(基本配置)

    上一篇Spring Boot我们简单讲了如何快速创建一个SpringBoot项目. 大家都知道SpringBoot非常强大,可以轻松与各种工具集成,但是我们知其然,也必须知其所以然. 今天开始就和大家 ...

  8. Spring Boot 外部化配置(二) - @ConfigurationProperties 、@EnableConfigurationProperties

    目录 3.外部化配置的核心 3.2 @ConfigurationProperties 3.2.1 注册 Properties 配置类 3.2.2 绑定配置属性 3.1.3 ConfigurationP ...

  9. Spring Boot 排除自动配置的 4 种方法,关键时刻很有用!

    Spring Boot 提供的自动配置非常强大,某些情况下,自动配置的功能可能不符合我们的需求,需要我们自定义配置,这个时候就需要排除/禁用 Spring Boot 某些类的自动化配置了. 比如:数据 ...

随机推荐

  1. VMware ESXi 客户端连接控制台时,提示“VMRC 控制台连接已断开...正在尝试重新连接”的解决方法

    故障描述: 通过 VMware vSphere Client 连接到安装 VMware ESXi 虚拟环境的主机时,当启动其中的虚拟机后,无法连接到控制台. 选择"控制台"时,控制 ...

  2. 在nginx下导出数据库数据

    首先上干货 解决问题 set_time_limit(0); //设置脚本运行时间为不限制 因为php脚本默认时间为30秒 ini_set('memory_limit', -1); //取消脚本运行内存 ...

  3. 热力图 vue 项目中使用热力图插件 “heatmap.js”(保姆式教程)

    我现在写的这项目是用CDN引入 heatmap.js, 可根据自己项目情况使用哪种方式引入插件. 官网地址 "https://www.patrick-wied.at/static/heatm ...

  4. day31 Pyhton 总结

    # 什么是封装?     # 广义上(大家认为的) :         # 把一类事务的相同的行为和属性归到一个类中 # class Dog: #     def bite(self):pass    ...

  5. pytest文档50-命令行参数--durations统计用例运行时间

    前言 写完一个项目的自动化用例之后,发现有些用例运行较慢,影响整体的用例运行速度,于是领导说找出运行慢的那几个用例优化下. --durations 参数可以统计出每个用例运行的时间,对用例的时间做个排 ...

  6. 论减少代码中return语句的骚操作

    一.写作背景 最近组内在推行checkstyle代码规范的检测,关于checkstyle的介绍可以参考:https://checkstyle.sourceforge.io, 在按照checkstyle ...

  7. rabbitmq之后台管理和用户设置

    前言 前面介绍了erlang环境的安装和rabbitmq环境安装,接下来介绍rabbitmq的web管理和用户设置. 启用后台管理插件 通过后台管理插件我们可以动态监控mq的流量,创建用户,队列等. ...

  8. css和xpath定位补充

    定位的网页的地址:https://item.jd.com/100000323510.htmlxpath绝对定位: 1 以"/"开头的是绝对定位 2 /html/body/div[1 ...

  9. springboot入门系列(五):SpringBoot连接多RabbitMQ源

    SpringBoot连接多RabbitMQ源 在实际开发中,很多场景需要异步处理,这时就需要用到RabbitMQ,而且随着场景的增多程序可能需要连接多个RabbitMQ.SpringBoot本身提供了 ...

  10. 如果只推荐一本 Python 书,我要 Pick 它!

    今年二月初,我偶然看到了一条推特: <流畅的Python>一书的作者发布了一条激动人心的消息:他正在写作第二版! 如果要票选最佳的 Python 进阶类书目,这本书肯定会是得票率最高的书籍 ...