个人描述:
最近参与公司的一个关于接口开发的项目。里面用到多个环境的切换,开发环境,测试环境,生产环境只需要修改一下spring.profiles.active 参数即可。因为之前的项目没有碰到过,所以本人对此学习了一下。这里做一个多种环境,每个环境只配置一个数据源的demo。
项目目录结构:
第一步:配置SSM框架,引入对应的包,如果你是用idea工具的话,我们创建maven 项目之后,这些spring 的基本jar包会帮我们自动装配。
这里使用的是C3P0数据连接
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1.2</version>
</dependency>
第二步:配置applicationContext.xml,这里配置完成之后,下面红色标记的bean id="dataSource" 会出现红色错误提示,这是因为id重复了,当我们配置了spring.profiles.activec参数之后,系统根据spring.profiles.active参数值去加载对应的beans,所以在与mybatis整合时,不会出现bean重复报错的情况。因此不会影响项目的正常启动与使用
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
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
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd">
<!--添加spring 与mybatis 整合-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="mapperLocations" value="classpath:mapper/*.xml"/>
</bean>
<!--mybatis与dao层的映射-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.wl.web.dao"/>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
</bean>
<!--通过 profile 配置多环境数据源-->
<!--dev 开发环境-->
<context:property-placeholder location="applicationdev.properties" />
< bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${dev.jdbc.driverClass}"/>
<property name="jdbcUrl" value="${dev.jdbc.jdbcUrl}"/>
<property name="user" value="${dev.jdbc.username}"/>
<property name="password" value="${dev.jdbc.password}"/>
<property name="initialPoolSize" value="${dev.jdbc.initialPoolSize}"/>
<property name="maxIdleTime" value="${dev.jdbc.maxIdleTime}"/>
<property name="maxPoolSize" value="${dev.jdbc.maxPoolSize}"/>
<property name="minPoolSize" value="${dev.jdbc.minPoolSize}"/>
</bean>
</beans>
<!--test 测试环境-->
<beans profile="test">
<context:property-placeholder location="applicationtest.properties" />
< bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${test.jdbc.driverClass}"/>
<property name="jdbcUrl" value="${test.jdbc.jdbcUrl}"/>
<property name="user" value="${test.jdbc.username}"/>
<property name="password" value="${test.jdbc.password}"/>
<property name="initialPoolSize" value="${test.jdbc.initialPoolSize}"/>
<property name="maxIdleTime" value="${test.jdbc.maxIdleTime}"/>
<property name="maxPoolSize" value="${test.jdbc.maxPoolSize}"/>
<property name="minPoolSize" value="${test.jdbc.minPoolSize}"/>
</bean>
</beans>
</beans>
第三步:配置开发环境下的数据源信息
applicationdev.properties
dev.jdbc.driverClass =oracle.jdbc.driver.OracleDriver
dev.jdbc.username =dev1234
dev.jdbc.password =dev1234
dev.jdbc.jdbcUrl = jdbc:oracle:thin:@ip:1521:devdb
dev.jdbc.initialPoolSize = 5
dev.jdbc.maxPoolSize =10
dev.jdbc.minPoolSize =5
dev.jdbc.maxIdleTime =2000
第四步:配置测试环境下的连接信息
applicationtest.properties
test.jdbc.driverClass =oracle.jdbc.driver.OracleDriver
test.jdbc.username =test1234
test.jdbc.password =test1234
test.jdbc.jdbcUrl =jdbc:oracle:thin:@ip:1521:testdb
test.jdbc.initialPoolSize = 5
test.jdbc.maxPoolSize =10
test.jdbc.minPoolSize =5
test.jdbc.maxIdleTime =2000
这样的话,我们还可以依次类推,配置生产环境的连接信息
这里我们就配置完成了,写一下测试类测试一下吧!
第五步:测试类
import com.mchange.v2.c3p0.ComboPooledDataSource;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import javax.sql.DataSource;
import static org.junit.Assert.assertNotNull;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:applicationContext.xml"})
//@ActiveProfiles({"dev"})
@ActiveProfiles({"test"})
@Autowired
DataSource dataSource;
@Test
public void testDev(){
assertNotNull(dataSource);
ComboPooledDataSource comboPooledDataSource = (ComboPooledDataSource) dataSource;
System.out.println(comboPooledDataSource.getJdbcUrl());
}
}
通过控制台的打印,我们可以看到我们连接的信息是不是正确的
第六步:项目启动时,配置数据连接环境。有很多方式
1,
web.xml中加入:
<context-param> <param-name>spring.profiles.active</param-name> <param-value>dev</param-value> </context-param>
2,下图是run环境下的配置情况,Debug也同样配置spring.profiles.active=dev即可这样我们debug模式下,也可以正常启动了
JAVA_OPS 配置的是堆,和永久区的大小。这个要根据不通项目配置不一样。也可以不配,如果项目可以正常启动的话