SpringMVC+Mybatis配置多数据源

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013310119/article/details/82700461

业务场景:

在实际项目开发中,有时候数据会存放在多个数据库中即存在不同的数据源。那么在SSM框架中,如何配置多个数据库呢?

准备:

两个Oracle数据源

DataSource1:172.83.242.145:1521/orcl 用户名:ZSYW_JR 密码:******

DataSource2:172.83.30.209:1521/orcl 用户名:ydpt  密码:*******

实现思路:

第一步:配置数据源DataSource

 <!-- 测试环境数据库1 -->
	<bean id="dataSource"
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
       <property name="url" value="jdbc:oracle:thin:@172.83.242.145:1521:orcl" />
        <property name="username" value="ZSYW_JR" />
        <property name="password" value="ZSYW_JR" />
    </bean>
    <!-- 测试环境数据库2 -->
    <bean id="dataSource2"
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
       <property name="url" value="jdbc:oracle:thin:@172.83.30.209:1521:orcl" />
        <property name="username" value="ydpt" />
        <property name="password" value="ydpt" />
    </bean>

第二步:配置sqlSessionFactory

 <!-- 配置数据源,加载配置,也就是dataSource -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"></property>
        <!--mybatis的配置文件-->
        <property name="configLocation" value="classpath:/mybatis-config.xml" />
        <!--扫描 XXXmapper.xml映射文件,配置扫描的路径-->
        <!-- <property name="mapperLocations" value="classpath:com/javafeng/mapping/*.xml"></property>
        <property name="mapperLocations" value="classpath:com/inspur/NSRZCXXGR/mapping/*.xml"></property> -->
        <property name="mapperLocations">
  			<array>
   				<value>classpath:com/inspur/SSO/Mapper/*.xml</value>
   				<value>classpath:com/inspur/test/dao/*.xml</value>
   				<value>classpath:com/inspur/NSRZCXXGR/mapping/*.xml</value>
 		    </array>
	    </property>
    </bean>
    
     <bean id="sqlSessionFactory2" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource2"></property>
        <!--mybatis的配置文件-->
        <property name="configLocation" value="classpath:/mybatis-config.xml" />
        <!--扫描 XXXmapper.xml映射文件,配置扫描的路径-->
        <!-- <property name="mapperLocations" value="classpath:com/javafeng/mapping/*.xml"></property>
        <property name="mapperLocations" value="classpath:com/inspur/NSRZCXXGR/mapping/*.xml"></property> -->
        <property name="mapperLocations">
  			<array>
   				<value>classpath:com/inspur/test1/dao/*.xml</value>
 		    </array>
	    </property>
    </bean>

第三步:配置扫描mybatis的xml文件其中设置不同的sqlSessionFactory

 <!-- 多数据源配置 数据库1 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.inspur.test.dao" />
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
    </bean>
    
    <!-- 多数据源配置 数据库2 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.inspur.test1.dao" />
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory2"></property>
    </bean>

完整applicationContext.xml的配置

扫描二维码关注公众号,回复: 3417215 查看本文章
<?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:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
    <!--数据源-链接数据库的基本信息,这里直接写,不放到*.properties资源文件中-->
    <!-- 测试环境数据库1 -->
	<bean id="dataSource"
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
       <property name="url" value="jdbc:oracle:thin:@172.83.242.145:1521:orcl" />
        <property name="username" value="ZSYW_JR" />
        <property name="password" value="ZSYW_JR" />
    </bean>
    <!-- 测试环境数据库2 -->
    <bean id="dataSource2"
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
       <property name="url" value="jdbc:oracle:thin:@172.83.30.209:1521:orcl" />
        <property name="username" value="ydpt" />
        <property name="password" value="ydpt" />
    </bean>
    
    <!-- 配置数据源,加载配置,也就是dataSource -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"></property>
        <!--mybatis的配置文件-->
        <property name="configLocation" value="classpath:/mybatis-config.xml" />
        <!--扫描 XXXmapper.xml映射文件,配置扫描的路径-->
        <!-- <property name="mapperLocations" value="classpath:com/javafeng/mapping/*.xml"></property>
        <property name="mapperLocations" value="classpath:com/inspur/NSRZCXXGR/mapping/*.xml"></property> -->
        <property name="mapperLocations">
  			<array>
   				<value>classpath:com/inspur/SSO/Mapper/*.xml</value>
   				<value>classpath:com/inspur/test/dao/*.xml</value>
   				<value>classpath:com/inspur/NSRZCXXGR/mapping/*.xml</value>
 		    </array>
	    </property>
    </bean>
    
     <bean id="sqlSessionFactory2" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource2"></property>
        <!--mybatis的配置文件-->
        <property name="configLocation" value="classpath:/mybatis-config.xml" />
        <!--扫描 XXXmapper.xml映射文件,配置扫描的路径-->
        <!-- <property name="mapperLocations" value="classpath:com/javafeng/mapping/*.xml"></property>
        <property name="mapperLocations" value="classpath:com/inspur/NSRZCXXGR/mapping/*.xml"></property> -->
        <property name="mapperLocations">
  			<array>
   				<value>classpath:com/inspur/test1/dao/*.xml</value>
 		    </array>
	    </property>
    </bean>
    
    
    <!-- DAO接口所在包名,Spring会自动查找之中的类 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.inspur.NSRZCXXGR.dao" />
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
    </bean>
    
     <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.inspur.SSO.IDao" />
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
    </bean>
    <!-- 多数据源配置 数据库1 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.inspur.test.dao" />
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
    </bean>
    
    <!-- 多数据源配置 数据库2 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.inspur.test1.dao" />
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory2"></property>
    </bean>

    <!--事务管理-->
    <bean id="transactionManager"
          class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <!--注入dataSource-->
        <property name="dataSource" ref="dataSource" />
        
    </bean>
    <!--开启事务注解扫描-->
    <tx:annotation-driven transaction-manager="transactionManager"></tx:annotation-driven>
</beans>

测试testController:

package com.inspur.test.controller;

import com.alibaba.fastjson.JSON;
import com.inspur.SSO.entity.token;
import com.inspur.SSO.service.tokenService;
import com.inspur.test.entity.test;
import com.inspur.test.service.test1Service;
import com.inspur.test.service.testService;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.annotation.Resource;

import java.util.HashMap;
import java.util.Map;

/**
 * Created by 13926 on 2017/7/18.
 */
@Controller
@RequestMapping(value = "/test")
public class testController {
    @Resource(name = "test1Service")
    test1Service t1Service;
    
    @Resource(name = "testService")
    testService tService;

    @RequestMapping(value="/add", method=RequestMethod.POST)
    @ResponseBody
	public  JSON queryTokenYX(String id,String name) {
    	
    	test tt = new test();
    	
    	tt.setId(id);
    	
    	tt.setName(name);
		
		t1Service.insert(tt);//数据库1添加测试数据
		
		tService.insert(tt);//数据库2添加测试数据
		
		
		Map<String, Object> result = new HashMap<String, Object>();  
		
		result.put("flag", "1");
		result.put("success", "盗墓笔记");
		result.put("shxxdm", "23435345345465");
		result.put("SSJT", "我的老家是什么国");
		
		System.out.println("返回的JSON串"+ JSON.toJSON(result));
		
		JSON jsonString = (JSON) JSON.toJSON(result);  
		
		return jsonString;
		
	}
    
}

调用Http接口:

数据库数据:

数据源1:

数据库2

猜你喜欢

转载自blog.csdn.net/u013310119/article/details/82700461