我们的项目在开发环境、生产环境,不同的环境下会有不同的配置。比如访问服务的端口,数据库的配置等。如果每次切换环境或发布时都去修改这些配置的值,不仅麻烦而且很容易出错。
那该怎么办呢?
能不能通过不同的环境,加载不同的配置呢?
解决方法:
方法一:增加多配置文件,不同环境时,读取不同配置
1、根据环境,增加不同的配置文件,具体如下图:
具体配置内容类似 application.yml,根据不同环境,设置不同服务器,端口等
2、删除application.yml内容,增加环境配置
spring:
profiles:
active: dev
这样,我们切换环境和打包时,只需要修改application.yml即可。
不过每次还是需要更改application.yml,还是有些麻烦,我们可以通过下面进阶版处理
方法二:通过profiles动态配置环境
1、根据环境,增加不同的配置文件,具体如下图:
2、修改pom.xml,设置配置环境profiles(多模块工程时,在启动模块pom中修改),与bulid平级
<profiles>
<profile>
<id>dev</id>
<properties>
<!-- 环境标识,需要与配置文件的名称相对应 -->
<activatedProperties>dev</activatedProperties>
</properties>
<activation>
<!-- 默认环境 -->
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>test</id>
<properties>
<activatedProperties>test</activatedProperties>
</properties>
</profile>
<profile>
<id>prod</id>
<properties>
<activatedProperties>prod</activatedProperties>
</properties>
</profile>
</profiles>
3、设置application.yml内容,动态指定启动环境
spring:
profiles:
active: @activatedProperties@
注: @activatedProperties@ 中内如必须与 profile=>properties=> activatedProperties节点一致
4、选择启动环境
5、指定环境打包
通过命令,指定打包环境打包
clean package -P prod
打包完成,可查看 target\classes 中 application.yml 是否是指定环境
spring:
profiles:
active: prod