Profile
在软件开发过程中,敏捷开发模式十分常见,也就是每次都提交一个小阶段的测试。那么可能是开发人员使用一套环境,测试人员使用一套环境,两套系统的数据库是不一样的。面对这种“在不同的环境中进行切换”的需求,Spring也会对这样的场景进行支持,也就是Bean的Profile
一.使用注解@Profile配置
二.使用XML定义Profile
<beans profile="test">
<bean id="testDataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url " value="jdbc:mysql://localhost:3306/chapter12"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</bean>
</beans>
<beans profile="dev">
<bean id="devDataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url " value="jdbc:mysql://localhost:3306/chapter13"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</bean>
</beans>
三.启动Profile
启动java配置或者xml配置Profile时,这两个Bean不会被加载到Spring IOC中,需要自行激活Profile。激活Profile有5种方法。
- 在使用SpringMVC中可以配置Web上下文参数,或者DispatchServlet参数。
- 作为JNDI条目
- 配置环境变量
- 配置JVM启动参数
- 在集成测试环境中使用ActiverProfiles
1.在测试代码中,加入@ActiveProfiles来指定加载哪个Profile。
@ActiveProfiles("dev")
2.当在服务器中运行,则可以配置Java虚拟机的启动项,比如在Tomcat上或main方法上,这时可以启动java虚拟机的参数来实现,这个参数存在两个。
- spring.profiles.active:启动的Profile,如果配置了它,则下面的配置项将会失效
- spring.profiles.default:默认启动的Profile,如果系统没有配置关于Profile,则会启动。
这时候可以配置JVM的参数,比如需要启动test
JAVA_OPTS="-Dspring.profiles.active=test"
3.在大部分情况下需要启动web服务器,如果使用SpringMVC,可以配置web环境参数或者DispatcherServlet参数来选择对应的Profile,比如在web.xml中进行配置。
......
<!--使用web环境参数-->
<context-param>
<param-name>spring.profiles.active</param-name>
<param-value>test</param-value>
</context-param>
......
<!--使用SpringMVC的DispatcherServlet环境参数-->
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>2</load-on-startup>
<init-param>
<param-name>spring.profiles.active </param-name>
<param-name>test</param-name>
</init-param>
</servlet>
----全文来自《JavaEE 互联网轻量级框架整合开发》