Spring入门(七):Spring Profile使用讲解 (2)

我们也可以通过<beans>元素的profile属性,在xml中配置profile bean,如下所示:

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans " profile="dev"> <bean p:driverClassName="com.mysql.jdbc.Driver" p:url="jdbc:mysql://localhost:3306/mybatis_action_db" p:username="dev" p:password="dev"/> </beans>

可以参考该配置,分别创建qa和prod环境的profile xml文件。

不过还是推荐使用嵌套的<beans>元素,在一个xml文件中配置好3个环境的数据源,代码如下所示:

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans "> <beans profile="dev"> <bean p:driverClassName="com.mysql.jdbc.Driver" p:url="jdbc:mysql://localhost:3306/mybatis_action_db" p:username="dev" p:password="dev"/> </beans> <beans profile="qa"> <bean p:driverClassName="com.mysql.jdbc.Driver" p:url="jdbc:mysql://localhost:3307/mybatis_action_db" p:username="qa" p:password="qa"/> </beans> <beans profile="prod"> <bean p:driverClassName="com.mysql.jdbc.Driver" p:url="jdbc:mysql://localhost:3308/mybatis_action_db" p:username="prod" p:password="prod"/> </beans> </beans> 3. 激活profile

截止目前,我们按照环境的维度创建了3个bean,但实际运行时,只会创建1个bean,具体创建哪个bean取决于处于激活状态的是哪个profile。

那么,我们该如何激活某个profile呢?

Spring在确定激活哪个profile时,需要依赖2个属性:

spring.profiles.active

spring.profiles.default

spring.profiles.active的优先级比spring.profiles.default高,即如果没有配置spring.profiles.active,就使用spring.profiles.default配置的值,如果配置了spring.profiles.active,就不会再使用spring.profiles.default配置的值。

如果两者都没有配置,就只会创建那些没有定义profile的bean。

Web应用中,在web.xml中设置spring.profiles.active的代码如下所示:

<context-param> <param-name>spring.profiles.active</param-name> <param-value>dev</param-value> </context-param>

也可以使用代码方式激活:

AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(); context.getEnvironment().setActiveProfiles("dev"); 4. 单元测试

新建Main类,在其main()方法中添加如下测试代码:

package chapter03.profile; import org.springframework.context.annotation.AnnotationConfigApplicationContext; public class Main { public static void main(String[] args) { AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(); context.getEnvironment().setActiveProfiles("dev"); context.register(DataSourceConfig.class); context.refresh(); context.close(); } }

输出结果如下所示:

This is dev DataSource

如果将代码修改为context.getEnvironment().setActiveProfiles("qa");,输出结果为:

This is qa DataSource

如果将代码修改为context.getEnvironment().setActiveProfiles("prod");,输出结果为:

This is prod DataSource

5. 源码及参考

源码地址:https://github.com/zwwhnly/spring-action.git,欢迎下载。

汪云飞《Java EE开发的颠覆者:Spring Boot实战》

Craig Walls 《Spring实战(第4版)》

6. 最后

打个小广告,欢迎扫码关注微信公众号:「申城异乡人」,定期分享Java技术干货,让我们一起进步。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpdsjp.html