springboot与maven配置多环境
开发任何的项目至少都需要三个环境,分别是
开发环境
测试环境
生产环境
环境不同意味着配置也是不相同的,比如数据库,文件路径等等配置,那么如何解决这么多环境整合在一起既不混乱又能很优雅呢?
解决方案就是多环境整合,在打包的时候,使用命令来区分环境
mvn clean install package -P dev
这个-P就是指定配置环境的
1. application.yml作为主配置文件
里面定义了需要激活的环境,如下:
spring:profiles:active: @profile.active@
2. application-*.yml这三个配置文件就是各自环境的配置
比如application-dev.yml(开发环境)文件的配置如下:
server:port: 8080servlet:context-path: /api-front
spring:redis:database: 2host: xxxxpassword: xxxx
3.POM文件配置
要和Maven整合当然少不了pom文件的配置,maven中也提供了profile的支持,每个profile能够定义自己的一些依赖和配置和激活条件,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>
maven中的profile的激活条件还可以根据jdk、操作系统、文件存在或者缺失来激活。如下
<!--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></profile>
资源过滤
在进行生产环境打包的时候并不需要开发和测试环境的一些文件,这里我们可以进行资源的过滤,保留需要的配置和文件,同样是在pom文件中定义,如下:
<build><resources><!--排除配置文件--><resource><directory>src/main/resources</directory><!--先排除所有的配置文件--><excludes><!--使用通配符,当然可以定义多个exclude标签进行排除--><exclude>application*.yml</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动态的引入配置文件。