1、首先pom.xml
配置文件要在与<dependencies>
标签同级配置<profiles>
标签的配置
<profiles>
<!--测试环境-->
<profile>
<id>test</id>
<properties>
<env>test</env>
</properties>
</profile>
<!--生产环境-->
<profile>
<id>product</id>
<properties>
<env>product</env>
</properties>
</profile>
</profiles>
增加了profiles配置,在idea中就会出现相应的profile
2、 配置需要替换的环境的配置文件
maven执行package命令解析配置文件中的占位符进行替换
文档,配置需要替换的环境的配置文件
<filters>
<!-- 需要读取的配置文件来源 -->
<filter>src/main/filters/configfile_${env}.properties</filter>
</filters>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<!-- 需要替换占位符的配置文件-->
<include>spring-mvc.xml</include>
<include>config/configfile.properties</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
我的文件目录为 src/main/filter
目录下为需要根据环境选取的配置文件,根据profile环境的不同,分为 configfile_test.properties
文件和 configfile_product.properties
文件,而我需要替换占位符的配置文件为 src/main/resources
目录下的spring-mvc.xml
和config/configfile.properties
#configfile_test.properties文件
config.id=test_1
config.name=test_domino
#configfile_product.properties 文件
config.id=product_1
config.name=product_domino
#configfile.properties文件
config_id=${config.id}
config_name=${config.name}
#spring-mvc.xml文件
<bean id="configBean" class="cn.shutdown.web.bean.ConfigBean">
<property name="id" value="${config.id}"/>
<property name="name" value="${config.name}"/>
</bean>
3、根据profile启动项目
如果我勾选 test
profile 然后使用jetty run 启动项目
读取的配置就是 configfile_test.properties文件中的配置
在target
中被编译的配置文件 spring-mvc.xml
和configfile.properties
文件中的占位符的值也被替换为configfile_test.properties
配置文件的值
如果使用product
profile进行编译和启动,配置文件中的${}
点位符也会相应的被替换为 configfile_product.properties
中的配置的值
至此,根据环境读取相应环境的配置文件的功能就实现了
demo的源码地址
https://gitee.com/j__domino/springboot-demo/tree/master/spring-config-demo/spring-profile-env-demo