spring3.1从开始就提供了profile功能,方便我们为不同的profile使用不同的bean。因此我们会遇到下面的场景,在开发环境中数据源的获取方式是直连数据库,部署环境中需要连接的是JNDI,如何避免项目打包完每次人工更改配置文件的繁琐工作呢?
通过引入Spring和Maven的profile特性来实现不同环境自动切换不同配置的功能。
声明Spring profile
1、 定义两个beans,分别对应两个环境下的数据源配置:在Spring的配置文件applicationContext.xml中定义两个profile的beans。
destroy-method="close">
jdbc:mysql://localhost:1433/jeeweb
admin
adminpassword
1
20
更改web.xml
那么根据Spring的profile特性,我们只要在web.xml文件中定义如下形式配置:
spring.profiles.active
${profiles.active}
就会启用相应的profile配置,Spring根据指定的配置来注入依赖。
为spring.profiles.active赋值
那么如何在打包时自动更改spring.profiles.active的值呢?这就需要Maven的profile特性。
我们将上述spring.profiles.active的param-value的值更改为{profiles.active},这是Maven的属性值替换的占位符,Maven的资源过滤插件(Maven Resources plugin)将会在构建期间替换该值,为了在打包时启用资源过滤,需要我们配置Maven打包插件(Maven war plugin):
org.apache.maven.plugins
maven-war-plugin
2.4
${project.artifactId}
激活spring profile
true
src/main/webapp
**/web.xml
src/main/webapp
src/main/webapp/WEB-INF/web.xml
启用Maven profile
最后在项目的pom.xml或m2文件夹下的setting.xml中指定Maven的profile:
不同的打包环境
开发环境,默认激活
development
development
部署环境
production
production
默认启用的是dev环境配置
true
根据上述配置,输入打包命令mvn clean package默认启用的是production,数据源由JNDI提供,如果需要激活另一个profile,只要更改打包命令为mvn clean package -P development。