多个环境不同配置文件实现
在开发中会遇到要把项目部署到不同的环境,一般把项目部署到服务器上,需要改数据库配置,redis配置,dubbo配置等等,这个时候如果只有一套配置文件,那部署前要把配置文件里的路径,ip都要改一遍,这样人工的修改难免会出现漏改,错改的情况,再遇到集群部署,分布式部署,一错再改就不好改了,所以自然想到如果可以有2套不同环境的配置文件就好了。
在spingboot中提供了很简单的解决办法,使用spring.profiles.active=test。
在application.yml中定义一个
spring:
profiles:
active: dev
然后再创建application-dev.yml和application-pro.yml配置文件。如图:
那这样在本地开发的时候,就用application-dev.yml。部署到服务器上时,在application.yml里改一下:
spring:
profiles:
active: pro
那这样打包的自动用application-pro.yml这个配置文件。
接下来又遇到一个问题,当开发一个多个模块分开,分布式的程序的时候的就很麻烦,部署的时候就需要一个模块一个模块改配置文件里的spring.profiles.active的值,这显然很麻烦。
当开发分布式部署的程序试,一般有一个总的项目pom文件,然后在这个pom文件里定义配置信息,然后通过动态的激活某一个配置来实现统一改所有的配置文件。
<profiles>
<profile>
<id>dev</id>
<properties>
<activeProfile>dev</activeProfile>
</properties>
</profile>
<profile>
<id>pro</id>
<properties>
<activeProfile>pro</activeProfile>
</properties>
</profile>
<profile>
<id>test</id>
<properties>
<activeProfile>test</activeProfile>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
</profiles>
如上,定一个3个配置信息,通过设置activeByDefault来激活其中的配置,然后通过maven-resources-plugin插件和resource的filtering属性用来表示资源文件中的占位符是否需要被替换来实现配置文件的替换。
现在application-pro.yml这个文件需要改一下:
spring:
profiles:
active: ${activeProfile}
然后在各个模块的pom文件里加上:
<resources>
<resource>
<directory>src/main/resources</directory>
<excludes>
<exclude>application.yml</exclude>
<exclude>application-dev.yml</exclude>
<exclude>application-pro.yml</exclude>
<exclude>application-test.yml</exclude>
</excludes>
</resource>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>application.yml</include>
<include>application-${activeProfile}.yml</include>
</includes>
</resource>
</resources>
上面是防止打包的时候,打包其他的环境的配置文件。
到此为止,基本满足所有的项目的需求了。