Spring + Spring MVC + mybatis 配置双数据源及用法

11 篇文章 1 订阅
9 篇文章 0 订阅

我也是在网上参考了多个资源信息,现总结如下:

一、jdbc配置,我这里使用的两个数据库都是oracle,网友们可以根据自己的情况去调整里面的配置信息

jdbc.driver=oracle.jdbc.driver.OracleDriver

jdbc.url1=jdbc\:oracle\:thin\:@192.168.1.88\:1521\:orcl
jdbc.username1=test1
jdbc.password1=password

jdbc.url2=jdbc\:oracle\:thin\:@192.168.1.88\:1521\:orcl
jdbc.username2=test2
jdbc.password2=password

jdbc.acquireIncrement=3
jdbc.initialPoolSize=3
jdbc.minPoolSize=2
jdbc.maxPoolSize=100
jdbc.maxIdleTime=600
jdbc.maxStatements=100
jdbc.numHelperThreads=10
jdbc.idleConnectionTestPeriod=900
二、Spring数据源配置

        <!-- 配置properties 开始 -->
	<bean id="propertyConfigurer "
		class="org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer">
		<!-- <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" 
			/> <property name="ignoreResourceNotFound" value="false" /> -->
		<property name="locations">
			<list>
				<value>classpath:config/jdbc.properties</value>
			</list>
		</property>
	</bean>
	<!-- 配置properties 结束 -->

	<!-- 配置第一个DataSource数据源 开始 -->
	<bean id="c3p0DataSource1" class="com.mchange.v2.c3p0.ComboPooledDataSource"
		destroy-method="close">
		<property name="driverClass" value="${jdbc.driver}" />
		<property name="jdbcUrl" value="${jdbc.url1}" />
		<property name="user" value="${jdbc.username1}" />
		<property name="password" value="${jdbc.password1}" />
		<property name="acquireIncrement" value="${jdbc.acquireIncrement}" />
		<property name="initialPoolSize" value="${jdbc.initialPoolSize}" />
		<property name="minPoolSize" value="${jdbc.minPoolSize}" />
		<property name="maxPoolSize" value="${jdbc.maxPoolSize}" />
		<property name="maxIdleTime" value="${jdbc.maxIdleTime}" />
		<property name="maxStatements" value="${jdbc.maxStatements}" />
		<property name="numHelperThreads" value="${jdbc.numHelperThreads}" />
		<property name="idleConnectionTestPeriod" value="${jdbc.idleConnectionTestPeriod}" />
	</bean>
	<!-- 配置第一个DataSource数据源 结束 -->
	
	<!-- 配置第一个DataSource数据源 开始 -->
	<bean id="c3p0DataSource2" class="com.mchange.v2.c3p0.ComboPooledDataSource"
		destroy-method="close">
		<property name="driverClass" value="${jdbc.driver}" />
		<property name="jdbcUrl" value="${jdbc.url2}" />
		<property name="user" value="${jdbc.username2}" />
		<property name="password" value="${jdbc.password2}" />
		<property name="acquireIncrement" value="${jdbc.acquireIncrement}" />
		<property name="initialPoolSize" value="${jdbc.initialPoolSize}" />
		<property name="minPoolSize" value="${jdbc.minPoolSize}" />
		<property name="maxPoolSize" value="${jdbc.maxPoolSize}" />
		<property name="maxIdleTime" value="${jdbc.maxIdleTime}" />
		<property name="maxStatements" value="${jdbc.maxStatements}" />
		<property name="numHelperThreads" value="${jdbc.numHelperThreads}" />
		<property name="idleConnectionTestPeriod" value="${jdbc.idleConnectionTestPeriod}" />
	</bean>
	<!-- 配置第一个DataSource数据源 结束 -->
	
	<!-- 配置数据源切换工具类,这个;类需要自己去写,后面会有介绍 -->
	<bean id="dynamicDataSource" class="com.odon.datasource.DynamicDataSource">  
        <property name="targetDataSources">  
            <map key-type="java.lang.String">  
                <entry value-ref="c3p0DataSource1" key="c3p0DataSource1"></entry>  
                <entry value-ref="c3p0DataSource2" key="c3p0DataSource2"></entry>  
            </map>  
            </property>  
                <property name="defaultTargetDataSource" ref="c3p0DataSource1">  <!-- 配置默认的数据源 -->
            </property>  
        </bean>  

	<!--创建sqlSessionFactory 开始 -->
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<!--引用mybatis配置文件 -->
		<property name="configLocation" value="classpath:config/mybatis-config.xml" />
		<!--引用数据源配置 这里需要注意一下这里配置的是工具类-->
		<property name="dataSource" ref="dynamicDataSource" />
		<!--引用mapper配置文件 -->
		<property name="mapperLocations" value="classpath:com/odon/mapper/*.xml" />
	</bean>
	<!--创建sqlSessionFactory 结束 -->

	<!-- 自动装配dao 开始-->
	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">  
       	        <property name="basePackage" value="com.odon.dao" />
        </bean>
	<!-- 自动装配dao 结束-->

	<!-- 启用spring注解支持 -->
	<context:annotation-config />
	<!-- 自动扫描(自动注入) -->
	<context:component-scan base-package="com.odon.service..*" />
	
	<!-- 配置事务管理器  开始 -->
	<bean id="txmanager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="c3p0DataSource1"></property>
	</bean>
	<!-- 配置事务管理器   结束 -->
	
	<!--基本事务定义,使用transactionManager作事务管理,默认get*,find*方法的事务为read-only-->
	<tx:advice id="txAdvice" transaction-manager="txmanager">
		<tx:attributes>
			<tx:method name="find*" read-only="true" />
			<tx:method name="get*" read-only="true"  />
			<tx:method name="update*" propagation="REQUIRED" />
			<tx:method name="delete*" propagation="REQUIRED" />
			<tx:method name="save*" propagation="REQUIRED" />
			<tx:method name="*" propagation="REQUIRED" />
	</tx:attributes>
	</tx:advice>
        <!-- 事物切点 以AspectJ方式 定义AOP
	         第一个*代表所有的返回值类型 
	         第二个*代表所有的类
	         第三个*代表类所有方法 
	         最后一个..代表所有的参数。
         -->
	<aop:config>
        <aop:pointcut id="interceptorPointCuts" expression="execution(* com.odon.service.impl.*Impl.*(..))" />
        <aop:advisor advice-ref="txAdvice" pointcut-ref="interceptorPointCuts" />
	</aop:config>
三、数据源切换工具类

package com.odon.datasource;

import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;

/**
 * @author zhangQiFeng

 * @date:2017-11-1 下午3:48:38
 * @version :
 *
 */
public class DynamicDataSource extends AbstractRoutingDataSource{

	@Override
	protected Object determineCurrentLookupKey() {
		 return DataSourceContextHolder.getDbType();
	}
	
}
四、数据源切换方法

package com.odon.datasource;

/**
 * @author zhangQiFeng

 * @date:2017-11-1 下午3:49:23
 * @version :
 *
 */

public class DataSourceContextHolder {

	private static final ThreadLocal<String> contextHolder = new ThreadLocal<String>();

	//设置要使用的数据源  
	public static void setDbType(String dbType) {
		contextHolder.set(dbType);
	}

	//获取数据源  
	public static String getDbType() {
		return contextHolder.get();  
	}

	//清除数据源,使用默认的数据源  
	public static void clearDbType() {
		contextHolder.remove();  
	}

}
五、数据源变量类

package com.odon.datasource;

/**
 * @author zhangQiFeng

 * @date:2017-11-1 下午3:51:52
 * @version :
 *
 */

public class DataSourceType {
	//数据源1  
	public static final String SOURCE_1 = "c3p0DataSource1";  
	//数据源2  
	public static final String SOURCE_2 = "c3p0DataSource2";  
}
六、使用方法

package com.odon.service.impl;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.odon.service.OAFileService;
import com.odon.dao.OAFileMapper;
import com.odon.datasource.DataSourceContextHolder;
import com.odon.datasource.DataSourceType;

/**
 * @author zhangQiFeng
 * @date:2017-11-1 下午5:01:17
 * @version :
 *
 */
@Service("OAFileService")
public class OAFileServiceImpl implements OAFileService{
	
	@Autowired
	private OAFileMapper OAFileMapper;

	@Override
	public List<Map<String,Object>> selectOAFileList() {
		List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();
		Map<String,Object> _map = new HashMap<String,Object>();
		try {
			DataSourceContextHolder.setDbType(DataSourceType.SOURCE_2);
			list = OAFileMapper.selectOAFileList(_map);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return list;
	}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值