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

目录

  • 前言
  • 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. 用C写一个简单的推箱子游戏(一)

    我现在在读大二,我们有一门课程叫<操作系统>,课程考查要求我们可以写一段程序或者写Windows.iOS.Mac的发展历程.后面我结合网上的资料参考,就想用自己之前简单学过的C写一关的推箱 ...

  2. (SpringBoot-Jpa)使用Idea数据库自动脚本Generate POJOS生成 Entity对象,

    因:使用SpringBoot -jpa,需要手动配置Entity 但是如果你的表中有很多属性,或者有很多表怎么办?? 每个手动写? 还是用mybatis.写mapper??? 解决:使用idea自动工 ...

  3. 0-完全开源的 Vue.js 入门级教程:HelloVue,发车啦!

    本教程基于 Vue.js 2.x 作者:HelloGitHub-追梦人物 欢迎来到 HelloVue-todo-tutorial,这个教程将手把手教你从零开始使用 Vue 搭建一个 Todo(待办事项 ...

  4. 用-pthread替代-lpthread

    -pthread 在多数系统中,-pthread会被展开为"-D_REENTRANT -lpthread".作为编译参数可以通知系统函数开启多线程安全特性,比如将errno定义线程 ...

  5. nc发送数据到端口

    head -n 1 /etc/passwd  | nc localhost 9200

  6. 使用PL/SQL Developer 学习pl/sql

    1.创建表并且插入一些数据 (这里表名为test): 2. New 一个SQL Window敲下如下代码(--为注释部分): declare   --declare:用于plsql中的声明变量,和be ...

  7. 解决Java连接Oracle 12c存在的问题

    感谢作者 原文链接:https://blog.csdn.net/peng_wei_kang/article/details/80403486 1.发现项目报以下错误:   Caused by: jav ...

  8. java之集合容器(Collection,Map)

    首先我们要了解什么是集合? 正所谓容器,比如说杯子是装水的容器,衣柜是装衣服的容器,那么集合就是装数据的容器. 集合有什么特点呢? 1.集合长度是可变的 2.集合用来存储对象 集合和数组有什么区别呢? ...

  9. Stream(四)

    public class Test { /* * 创建:一步 * 中间:0~n步 * 终结:一步 * * 三.终结操作 * 1.void forEach(Consumer ):遍历流中的数据 * 2. ...

  10. 渗透测试全流程靶机vulnhubDC-1完成笔记

    镜像下载地址 https://www.vulnhub.com/entry/dc-1-1,292/ 信息收集 1.可以使用netdiscover -i eth0 发现二层网络信息 发现两个设备(103是 ...