嗯,挺全乎儿的,Spring Boot 多环境配置都在这里了,你喜欢哪种?
![嗯,挺全乎儿的,Spring Boot 多环境配置都在这里了,你喜欢哪种?](https://static001.geekbang.org/infoq/58/588877ca000f6ff1a2437865ce0b856d.jpeg)
前言
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 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
。配置如下:
profile.active
实际上就是一个变量,在maven
打包的时候指定的-P test
传入的就是值。
pom 文件中定义 profiles
需要在maven
的pom.xml
文件中定义不同环境的profile
,如下:
![](https://static001.geekbang.org/infoq/68/68fc2184d2e490ff2c37097257bce866.png)
标签<profile.active>
正是对应着配置文件中的@profile.active@
。
<activeByDefault>
标签指定了默认激活的环境,则是打包的时候不指定-P
选项默认选择的环境。
以上配置完成后,将会在IDEA的右侧Maven
选项卡中出现以下内容:
![](https://static001.geekbang.org/infoq/17/17535a842184e619a4f26e689fa65789.png)
1
可以选择打包的环境,然后点击package
即可。
或者在项目的根目录下用命令打包,不过需要使用-P
指定环境,如下:
maven
中的profile
的激活条件还可以根据jdk
、操作系统
、文件存在或者缺失
来激活。这些内容都是在<activation>
标签中配置,如下:
![](https://static001.geekbang.org/infoq/4b/4be4ead0a371107ff08538f25f0b3dac.png)
资源过滤
如果你不配置这一步,将会在任何环境下打包都会带上全部的配置文件,但是我们可以配置只保留对应环境下的配置文件,这样安全性更高。
这一步配置很简单,只需要在pom.xml
文件中指定<resource>
过滤的条件即可,如下:
![](https://static001.geekbang.org/infoq/7b/7b990628fb98c104c3c2da6c2931d7d6.png)
上述配置主要分为两个方面,第一是先排除所有配置文件,第二是根据profile.active
动态的引入配置文件。
总结
至此,Maven
的多环境打包已经配置完成,相对来说挺简单,既可以在IDEA
中选择环境打包,也同样支持命令-P
指定环境打包。
总结
本文介绍了Spring Boot 的两种打包方式,每种方式有各自的优缺点,你更喜欢哪种呢?
评论