嗯,挺全乎儿的,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 某些类的自动化配置了. 比如:数据 ...
随机推荐
- ubuntu19.10如何设置固定ip
$ip a 看见系统中有两块网卡 lo: ...... ens33: ...... #cd /etc/netplan$ls目录下面有文件01-network-manager-all.yaml $sud ...
- 6.Android-五大布局
Android 五大布局如下所示: LinearLayout 线性布局 只能指定一个方向(垂直/水平)来布局 RelativeLayout 相对布局 通过某个控件为参照物,来定位其它控件的位置的布局方 ...
- 用网桥和veth实现容器的桥接模式
原理图如下 具体命令先不写了,有时间再写,主要还是用的上一篇说的知识.
- 【linux-centos】安装ifstat!
1.卸载原装ifstat find / -name *ifstat* 把/usr/sbin/ifstat.ifstat的man目录的.gz文件删除 2.下载安装 wget http://gael.ro ...
- MeteoInfoLab脚本示例:站点数据散点图
这里演示从micaps第一类数据(地面全要素观测)中读取一个变量(用DimDataFile类的stationdata方法),然后maskout掉中国区域之外的数据,利用scatterm函数绘制散点图. ...
- python 递归求和
例子: 1 mylist = [1,2,3,4,5] 2 def func(var): 3 if var == []: 4 print('列表为空') 5 return 0 6 return var[ ...
- [转] Swoft HTTP 服务
转载自Go语言中文网, https://studygolang.com/articles/20667 传统架构 PHP-FPM + Nginx 传统架构中所使用的Nginx + PHP-FPM的模型中 ...
- ps 树形显示
ps -axjf|grep swoft
- Java 8 中的抽象类和接口到底有啥区别?
上一篇栈长发了这篇<Java 8 有多牛逼?打破一切你对接口的认知!>,帮助许多人解开了疑惑,还有读者留言说两者还有啥区别,故引发了此篇: 在我们面试时也会经常遇到面试官问抽象类和接口的区 ...
- 一分钟了解"秒杀"系统
关于秒杀,第一反应都是实现起来比较复杂.难点在于:并发读+并发写+设计兜底方案的实现. 比如QQ,虽然数据量很大,但是多数的数据都是细粒度的数据查询,锁冲突比较少:但12306涉及到大量的读写操作,对 ...