今天新搭了一个项目,趁此机会,把springboot项目启动不同配置的环境(开发、测试、生产)复习一下,,总结两种方法,两种方法大同小异,其实也差不多。
第一种:
1.1.1、新增四个配置文件
application.yml是默认加载的,只需要把spring.profiles.active: 指向你需要的yml,就可以启动你想要启动的配置文件。
1.2.1、修改application.yml
在上面基础上,可以更灵活一点,就是读pom,
那上面得做如下的修改:
1.2.2、修改pom
然后修改pom,如下:
<profiles>
<profile>
<id>dev</id>
<properties>
<!-- 环境标识,需要与配置文件的名称相对应 -->
<activatedProperties>dev</activatedProperties>
</properties>
</profile>
<profile>
<id>test</id>
<properties>
<activatedProperties>test</activatedProperties>
</properties>
</profile>
<profile>
<id>prod</id>
<properties>
<activatedProperties>prod</activatedProperties>
</properties>
<activation>
<!-- 默认环境 -->
<activeByDefault>true</activeByDefault>
</activation>
</profile>
</profiles>
<build>
<resources>
<resource>
<!--配置文件路径 -->
<directory>src/main/resources</directory> <!--这里对应项目存放配置文件的目录-->
<!--开启filtering功能 必须加上,不然yml无法识别@符 -->
<filtering>true</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.3.0.RELEASE</version>
</plugin>
</plugins>
</build>
其中,pom里面的 activatedProperties 对应的就是application.yml里面的 @activatedProperties@
1.2.3、配置activeByDefault参数
只需要把这三行代码放到你想启动的环境下面就可以了。
避坑一:不能识别符号@,在步骤中配置的@activatedProperties@,启动会报异常,不能识别@符号。解决方法:
在pom.xml中设置filtering为true
<filtering>true</filtering>
第二种:
原理和第一种大同小异。相对来说更简单一点。 名字可以一样,包的位置不同
2.1.2、修改pom文件
<profiles>
<profile>
<id>dev</id>
<properties>
<profiles.active>dev</profiles.active>
</properties>
<!-- 是否默认 true表示默认-->
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>test</id>
<properties>
<profiles.active>test</profiles.active>
</properties>
</profile>
<profile>
<!-- 生产环境 -->
<id>prod</id>
<properties>
<profiles.active>prod</profiles.active>
</properties>
</profile>
</profiles>
<build>
<resources>
<resource>
<directory>src/main/resources/config</directory>
<!-- 资源根目录排除各环境的配置,防止在生成目录中多余其它目录 -->
<excludes>
<exclude>test/*</exclude>
<exclude>prod/*</exclude>
<exclude>dev/*</exclude>
</excludes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/resources/config/${profiles.active}</directory>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
最后一步和方法一样,只需要把
<!-- 是否默认 true表示默认-->
<activation>
<activeByDefault>true</activeByDefault>
</activation>
放到不同的位置就好了。
这样就ok了!
个人感觉项目本地启动的时候才会涉及到上面的问题,如果项目发布到服务器上面,那么重要的就不是启动了,而是打包了,如何打自己想要的包(测试、开发环境),只需要一条命令就可以了
-Pdev 或者 -Pprod指向一下就可以了。
避坑二:我开始在【datasource】下面配置【profiles】,spring已启动就报错:后来把【profiles】配置上移到Spring第一个配置就不报错了。很奇怪
spring:
jackson:
date-format: yyyy-MM-dd HH:mm:ss
time-zone: GMT+8
datasource:
type: com.zaxxer.hikari.HikariDataSource
profiles:
active: develop #需要使用的配置文件的后缀
END!!!