在实际开发过程中,根据不同的环境准备多套的配置是特别常见的情形。Spring为实现这个需求提供了简单的支持。在之前的文章中,我讲解了两种配置Spring的方式:Java配置、xml文件。针对这两种配置方式,实现多个环境的配置问题在实现方法上略有差异,但原理一致,可以类比学习。
我们来模拟一个情形:根据不同的环境,我们需要不同的数据源配置(数据库信息配置),比如开发环境、生产环境。在基于Java配置的方法中,我们可以这么实现:
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Profile; import org.springframework.jdbc.datasource.DriverManagerDataSource; import javax.sql.DataSource; @Configuration public class MyConfig { @Bean @Profile("dev") DataSource dataSource1(){ DriverManagerDataSource dataSource = new DriverManagerDataSource(); dataSource.setUrl("url1-------------"); dataSource.setUsername("user1"); //.... return dataSource; } @Bean @Profile("pro") DataSource dataSource2(){ DriverManagerDataSource dataSource = new DriverManagerDataSource(); dataSource.setUrl("url2-------------"); dataSource.setUsername("user2"); //.... return dataSource; } }
这个例子只是简单说明了两种不同的数据源,在实际开发过程中数据库配置会更复杂一些,不过这已经可以说明准备多个环境下的配置的重要性了。使用在创建bean的函数上使用@Profile注解,当配置类或者配置文件加载到Spring上下文中时,会根据当前环境的激活选项来决定某个bean是否需要创建。上面的代码只是说明了哪个环境使用哪个数据源,我们还需要在系统运行的时候指定激活哪个环境。其实我们只需要设定这两个条目的值就可以了。
- spring.profiles.active(如果配置了这个条目的值,系统运行时以这个条目指定的配置为准)
- spring.profiles.default(如果没有指定spring.profiles.active,应当配置一个默认环境下的配置)
在不同的应用程序中,配置这两个条目有不同的方法,大概有这几类:
实际开发过程中应该使用对应的方法去激活。
如果你是用的是xml的配置方式,你可以这么写:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <beans profile="dev"> <bean id="datasource1" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="url" value="url1----------"/> <property name="username" value="username1"/> </bean> </beans> <beans profile="pro"> <bean id="datasource2" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="url" value="url2----------"/> <property name="username" value="username2"/> </bean> </beans> </beans>
激活不同环境的方式与上面一致,如果不知道具体的方法,可以查阅其他资料。顺便提一下,Java配置和xml配置的bean是可以互相引用的,因为这些bean最后都存在于Spring上下文中,话说回来了,一个项目只有一种启动上下文的方式,使用了基于注解的就不能再使用基于xml的了,因为你总不想创建两个上下文吧?所以在只能启动一个上下文的情况下,如何在xml文件中使用Java配置类的bean或者相反情况怎么引用呢?你可以思考一下或者查阅一下资料,这里不展开讲解了。
如果这篇文章对你有帮助,来一波素质三连吧~下一篇继续学习Spring高级装配