嗯,挺全乎儿的,Spring Boot 多环境配置都在这里了,你喜欢哪种?
持续原创输出,点击上方蓝字关注我

目录
前言 Spring Boot 自带的多环境配置 创建不同环境的配置文件 指定运行的环境
Maven 的多环境配置 创建多环境配置文件 定义激活的变量 pom 文件中定义 profiles 资源过滤 总结
总结
前言
日常开发中至少有三个环境,分别是开发环境(dev),测试环境(test),生产环境(prod)。
不同的环境的各种配置都不相同,比如数据库,端口,IP地址等信息。
那么这么多环境如何区分,如何打包呢?
本篇文章就来介绍一下Spring Boot 中多环境如何配置,如何打包。
Spring Boot 自带的多环境配置
Spring Boot 对多环境整合已经有了很好的支持,能够在打包,运行间自由切换环境。
那么如何配置呢?下面将会逐步介绍。
创建不同环境的配置文件
既然每个环境的配置都不相同,索性将不同环境的配置放在不同的配置文件中,因此需要创建三个不同的配置文件,分别是application-dev.properties、application-test.properties、application-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.properties、application-test.properties、application-prod.properties。
加上默认的配置文件application.properties同样是四个配置文件。
定义激活的变量
需要将Maven激活的环境作用于Spring Boot,实际还是利用了spring.profiles.active这个属性,只是现在这个属性的取值将是取值于Maven。配置如下:
spring.profiles.active=@profile.active@
profile.active实际上就是一个变量,在maven打包的时候指定的-P test传入的就是值。
pom 文件中定义 profiles
需要在maven的pom.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选项卡中出现以下内容:

可以选择打包的环境,然后点击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 多环境配置都在这里了,你喜欢哪种?的更多相关文章
- SpringCloud入门之Spring Boot多环境配置切换指南
在 spring boot 中,有两种配置文件,一种是application.properties,另一种是application.yml,两种都可以配置spring boot 项目中的一些变量的定义 ...
- 一分钟学会Spring Boot多环境配置切换
一. 问题由来 开发环境.测试环境.生产环境--------我们的软件在不同的环境中,系统参数和配置可能会不一样,比如数据源配置.日志文件配置.以及一些软件运行过程中的基本配置,那每次我们将软件部署到 ...
- Spring Boot多环境配置
在项目开发阶段,开发环境和实际生产环境是不一样,比如使用的数据库/服务连接配置等.因此,配置多个开发环境profile还是必要的 多环境的配置(yml)方式 配置其实很简单,在resource目录下, ...
- spring boot多环境配置 直接上代码
spring: profiles: active: test jackson: date-format: yyyy-MM-dd HH:mm:ss datasource: dri ...
- Spring Boot的自动配置原理及启动流程源码分析
概述 Spring Boot 应用目前应该是 Java 中用得最多的框架了吧.其中 Spring Boot 最具特点之一就是自动配置,基于Spring Boot 的自动配置,我们可以很快集成某个模块, ...
- 【转】spring boot application.properties 配置参数详情
multipart multipart.enabled 开启上传支持(默认:true) multipart.file-size-threshold: 大于该值的文件会被写到磁盘上 multipart. ...
- Spring Boot核心(基本配置)
上一篇Spring Boot我们简单讲了如何快速创建一个SpringBoot项目. 大家都知道SpringBoot非常强大,可以轻松与各种工具集成,但是我们知其然,也必须知其所以然. 今天开始就和大家 ...
- Spring Boot 外部化配置(二) - @ConfigurationProperties 、@EnableConfigurationProperties
目录 3.外部化配置的核心 3.2 @ConfigurationProperties 3.2.1 注册 Properties 配置类 3.2.2 绑定配置属性 3.1.3 ConfigurationP ...
- Spring Boot 排除自动配置的 4 种方法,关键时刻很有用!
Spring Boot 提供的自动配置非常强大,某些情况下,自动配置的功能可能不符合我们的需求,需要我们自定义配置,这个时候就需要排除/禁用 Spring Boot 某些类的自动化配置了. 比如:数据 ...
随机推荐
- 用C写一个简单的推箱子游戏(一)
我现在在读大二,我们有一门课程叫<操作系统>,课程考查要求我们可以写一段程序或者写Windows.iOS.Mac的发展历程.后面我结合网上的资料参考,就想用自己之前简单学过的C写一关的推箱 ...
- (SpringBoot-Jpa)使用Idea数据库自动脚本Generate POJOS生成 Entity对象,
因:使用SpringBoot -jpa,需要手动配置Entity 但是如果你的表中有很多属性,或者有很多表怎么办?? 每个手动写? 还是用mybatis.写mapper??? 解决:使用idea自动工 ...
- 0-完全开源的 Vue.js 入门级教程:HelloVue,发车啦!
本教程基于 Vue.js 2.x 作者:HelloGitHub-追梦人物 欢迎来到 HelloVue-todo-tutorial,这个教程将手把手教你从零开始使用 Vue 搭建一个 Todo(待办事项 ...
- 用-pthread替代-lpthread
-pthread 在多数系统中,-pthread会被展开为"-D_REENTRANT -lpthread".作为编译参数可以通知系统函数开启多线程安全特性,比如将errno定义线程 ...
- nc发送数据到端口
head -n 1 /etc/passwd | nc localhost 9200
- 使用PL/SQL Developer 学习pl/sql
1.创建表并且插入一些数据 (这里表名为test): 2. New 一个SQL Window敲下如下代码(--为注释部分): declare --declare:用于plsql中的声明变量,和be ...
- 解决Java连接Oracle 12c存在的问题
感谢作者 原文链接:https://blog.csdn.net/peng_wei_kang/article/details/80403486 1.发现项目报以下错误: Caused by: jav ...
- java之集合容器(Collection,Map)
首先我们要了解什么是集合? 正所谓容器,比如说杯子是装水的容器,衣柜是装衣服的容器,那么集合就是装数据的容器. 集合有什么特点呢? 1.集合长度是可变的 2.集合用来存储对象 集合和数组有什么区别呢? ...
- Stream(四)
public class Test { /* * 创建:一步 * 中间:0~n步 * 终结:一步 * * 三.终结操作 * 1.void forEach(Consumer ):遍历流中的数据 * 2. ...
- 渗透测试全流程靶机vulnhubDC-1完成笔记
镜像下载地址 https://www.vulnhub.com/entry/dc-1-1,292/ 信息收集 1.可以使用netdiscover -i eth0 发现二层网络信息 发现两个设备(103是 ...