嗯,挺全乎儿的,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 某些类的自动化配置了. 比如:数据 ...
随机推荐
- Jmeter JDBC Request 使用详解
本篇博文讲解以MySQL为例,搞懂JDBC Request中MySQL的使用方法,换成其它数据库, 如Oracle.PSQL也会很容易上手. 一.基本配置 1.首先我们先了解一下,不同数据库的驱动类和 ...
- python练习三角形,99乘法
#方案一:# result=0# #列# for i in range(1,10):# #行# for j in range(1,i+1):# result=i*j# print('%d*%d=%d' ...
- 【Jenkins】远程调用jenkins进行构建方式!
前提:jenkins支持远程调用(具体设置自行百度)1.在我的个人中心--configure--API TOKEN--如果没有,则添加一个token,并生成,再复制并记录下来2.在你的job上面加上你 ...
- Navicat Premium 15破解
https://pan.baidu.com/s/1bJ1BJUcL6cFd4StB5Qn_hQ 提取码:1314 拿走,不谢!!!
- MASM入门 (一)DOSBox的安装和使用
目录 (1)DOSBox的下载安装 (2)DOSBox的使用 (3)Tips (1)DOSBox的下载安装 DOSBox从安装到使用的过程还是有些繁琐的,所以小编直接附上免安装版本,大家下载解压后点击 ...
- hdu3555 Bomb (数位dp入门题)
Bomb Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others)Total Submi ...
- django—模板相关
关于在html文件中使用模板语言时,一些符号的含义 {{}}:显示变量相关,在模板渲染的时候替换成值 {%%}:处理逻辑相关 django模板语言中,对于列表字典等容器类型,不能够通过[ 索引/键值 ...
- [阿里DIN] 深度兴趣网络源码分析 之 整体代码结构
[阿里DIN] 深度兴趣网络源码分析 之 整体代码结构 目录 [阿里DIN] 深度兴趣网络源码分析 之 整体代码结构 0x00 摘要 0x01 文件简介 0x02 总体架构 0x03 总体代码 0x0 ...
- webpack5文档解析(下)
声明:所有的文章demo都在我的仓库里 代码分离 代码分离的有点在于: 切割代码,生成不同的打包文件,按需加载这些文件. 每个bundle的体积更小 控制外部资源的加载顺序 常用的方法有: 入口起点: ...
- CAS 算法与 Java 原子类
乐观锁 一般而言,在并发情况下我们必须通过一定的手段来保证数据的准确性,如果没有做好并发控制,就可能导致脏读.幻读和不可重复度等一系列问题.乐观锁是人们为了应付并发问题而提出的一种思想,具体的实现则有 ...