往往在一个项目中会有开发环境、测试环境、演示环境、线上环境,那么各个环境的数据库配置、端口设置、redis配置、以及一些其他的配置该如何区分呢,profiles.active解决这个问题
一、正常项目的环境结构
在resources下能看到我配置了四个环境的环境变量
- application.properties(通用的都放在这里面)
单独需要重新配置的就按照各个环境放到对应环境里面 - application-dev.properties(开发环境)
- application-test.properties(测试环境)
- application-demo.properties(演示环境)
- application-prd.properties(线上环境)
二、具体的步骤
1、pom.xml
注意 :
- <activeByDefault>true</activeByDefault>配置了这个的就表示默认的环境是这个
- 这个放到<project> </project>大标签下即可
<profiles>
<!--开发环境-->
<profile>
<id>dev</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<profileActive>dev</profileActive>
</properties>
</profile>
<!--测试环境-->
<profile>
<id>test</id>
<properties>
<profileActive>test</profileActive>
</properties>
</profile>
<!--演示环境-->
<profile>
<id>demo</id>
<properties>
<profileActive>demo</profileActive>
</properties>
</profile>
<!--线上环境-->
<profile>
<id>prd</id>
<properties>
<profileActive>prd</profileActive>
</properties>
</profile>
</profiles>
在pom.xml中加入了这个之后,就能在Maven中看到Profiles,以后各个环境的切换就在此进行了
image.png
2、在Resources下新建对应的几个配置文件,并加上内容
image.png- application.properties
server.port= 9999
spring.profiles.active=@profileActive@
- application-dev.properties(开发环境)
server.port= 9991
- application-test.properties(测试环境)
server.port= 9992
- application-demo.properties(演示环境)
server.port= 9993
- application-prd.properties(线上环境)
server.port= 9994
注意:
-
1) 在application.properties中加入的spring.profiles.active=@profileActive@
image.png
@@中间的名字一定要是pom.xml文件中配置的
-
2)检查@profileActive@属性是否起作用:按住ctrl,再点击这个属性,能定位到相应的值的位置则起作用,否则没起作用
3、 profile对资源的操作
这个一定是放到<build> </build>标签下的哈
<!-- profile对资源的操作 -->
<resources>
<resource>
<directory>src/main/resources</directory>
<excludes>
<exclude>application*.properties</exclude>
</excludes>
</resource>
<resource>
<directory>src/main/resources</directory>
<!-- 是否替换@xx@表示的maven properties属性值 -->
<filtering>true</filtering>
<includes>
<include>application.properties</include>
<include>application-${profileActive}.properties</include>
</includes>
</resource>
</resources>
4、换着环境运行
-
dev(开发环境)
image.png -
test(测试环境)
image.png
-demo(演示环境)
image.png
-prd(线上环境)
image.png我们可以看到在application.properties中的9999端口根本没出现,这就是优先级的问题了
网友评论