`

Mybatis多数据源调用

阅读更多

环境:intellij15jdk1.8maven3

 

参考:http://www.jb51.net/article/104053.htm

 

1、  生成ssm项目,参见http://liguanshi.iteye.com/blog/2413023

2、  jdbc.properties文件中添加数据库连接

 

 

#============================================================================
# postgresql
#============================================================================
jdbc.postgresql.driver = org.postgresql.Driver
jdbc.postgresql.url = jdbc:postgresql://127.0.0.1:5432/cz?characterEncoding=UTF-8
jdbc.postgresql.username = postgres
jdbc.postgresql.password = ******

#============================================================================
# oracle
#============================================================================
jdbc.oracle.driver=oracle.jdbc.driver.OracleDriver
jdbc.oracle.url=jdbc:oracle:thin:@smart-dafeng:1521:orcl
jdbc.oracle.username=df
jdbc.oracle.password=******

 

 

3、 applicationContext-dao.xml中添加数据库连接及multipleDataSourcebean

 

<?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:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       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.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">

    <!--获取数据库配置文件-->
    <context:property-placeholder location="classpath:config/jdbc.properties"/>
    <!--设置数据源c3p0-->
    <bean id="oracleDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
        <property name="driverClass" value="${jdbc.oracle.driver}"/>
        <property name="jdbcUrl" value="${jdbc.oracle.url}"/>
        <property name="user" value="${jdbc.oracle.username}"/>
        <property name="password" value="${jdbc.oracle.password}"/>
        <property name="maxPoolSize" value="50"/>
        <property name="minPoolSize" value="2"/>
        <property name="maxIdleTime" value="60"/>
    </bean>

    <!--设置数据源c3p0-->
    <bean id="postgresqlDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
        <property name="driverClass" value="${jdbc.postgresql.driver}"/>
        <property name="jdbcUrl" value="${jdbc.postgresql.url}"/>
        <property name="user" value="${jdbc.postgresql.username}"/>
        <property name="password" value="${jdbc.postgresql.password}"/>
        <property name="maxPoolSize" value="50"/>
        <property name="minPoolSize" value="2"/>
        <property name="maxIdleTime" value="60"/>
    </bean>
    <bean id="multipleDataSource" class="com.elin4it.ssm.utils.MultipleDataSource">
        <property name="defaultTargetDataSource" ref="postgresqlDataSource"/>
        <property name="targetDataSources">
            <map>
                <entry key="postgresqlDataSource" value-ref="postgresqlDataSource"/>
                <entry key="oracleDataSource" value-ref="oracleDataSource"/>
            </map>
        </property>
    </bean>
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="multipleDataSource"/>
    </bean>

    <!-- mybatis.spring自动映射 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.elin4it.ssm.mapper"/>
    </bean>

    <!-- 自动扫描,多个包以 逗号分隔 -->
    <context:component-scan base-package="com.elin4it.ssm"/>
    <aop:aspectj-autoproxy/>
</beans>

 

 

 

4、 com.elin4it.ssm.utils添加MultipleDataSource

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

/**
 * Created by Administrator on 2018/3/21.
 */
public class MultipleDataSource extends AbstractRoutingDataSource {
    private static final ThreadLocal<String> dataSourceKey = new InheritableThreadLocal<String>();

    public static void setDataSourceKey(String dataSource) {
        dataSourceKey.set(dataSource);
    }

    @Override
    protected Object determineCurrentLookupKey() {
        return dataSourceKey.get();
    }
}

 

 

5、  将applicationContext-transaction.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" xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:aop="http://www.springframework.org/schema/aop"
       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 http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">


    <!--<bean id="dataSourceTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">-->
        <!--<property name="dataSource" ref="dataSource"/>-->
    <!--</bean>-->

    <!--<tx:advice id="txAdvice" transaction-manager="dataSourceTransactionManager">-->
        <!--<tx:attributes>-->
            <!--<tx:method name="find*" propagation="REQUIRED"/>-->
            <!--<tx:method name="update*" propagation="REQUIRED"/>-->
            <!--<tx:method name="delete*" propagation="REQUIRED"/>-->
            <!--<tx:method name="add*" propagation="REQUIRED"/>-->
        <!--</tx:attributes>-->
    <!--</tx:advice>-->

    <!--<aop:config>-->
        <!--<aop:advisor advice-ref="txAdvice" pointcut="execution(* cn.elinzhou.ixxs.service.*.*(..))"/>-->
    <!--</aop:config>-->
</beans>

 

 

6、 UserServiceImpl中添加数据库选择语句:MultipleDataSource.setDataSourceKey("oracleDataSource");

 

完成代码如下所示:

 

package com.elin4it.ssm.service;

import com.elin4it.ssm.mapper.StudentsMapper;
import com.elin4it.ssm.pojo.Students;
import com.elin4it.ssm.utils.MultipleDataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * Created by Administrator on 2018/3/21.
 */
@Service
public class UserServiceImpl implements UserService {
    //User接口 此处注入UserMapper时需要在UserMapper接口上添加<span style="font-family: Arial, Helvetica, sans-serif;">@Component进行依赖注入</span>
    @Autowired
    private StudentsMapper userMapper;
    public Students findUser() throws Exception {
// 此处切换数据库,输出不同结果
//        MultipleDataSource.setDataSourceKey("postgresqlDataSource");
        MultipleDataSource.setDataSourceKey("oracleDataSource");
        //调用mapper类中的selectByExample方法,如果传入类型为null,则表示无条件查找
        Students users = userMapper.selectByPrimaryKey(2);
        return users;
    }
}

 

7、  pom中添加oracle数据库依赖:

<!-- 数据库驱动 -->
    <dependency>
      <groupId>com.oracle</groupId>
      <artifactId>ojdbc6</artifactId>
      <version>11.2.0.1.0</version>
</dependency>

 

8、  运行。Oracle数据库输出结果:

 



修改UserServiceImpl.java代码后,Postgresql数据库输出结果:

 


 

  • 大小: 23.6 KB
  • 大小: 22.4 KB
分享到:
评论

相关推荐

    spring整合mybatis多数据源

    6. **编写业务代码**:最后,在业务层,我们可以通过设置一个属性或者上下文变量来切换数据源,然后调用MyBatis的接口进行数据操作。Spring会自动处理数据源的选择和事务的传播。 在提供的"spring整合mybatis多数据...

    springboot mybatis多数据源加事务嵌套

    springboot mybatis多数据源加事务嵌套 事务之间的调用 回滚 亲测可用 定义2个库分别建立 CREATE TABLE `user` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '用户编号', `user_name` varchar(25) ...

    spring+mybatis 多个数据源调用示例

    在Spring+Mybatis框架中,实现多个数据源的调用是一项常见的需求,特别是在大型系统或者分布式环境中,可能需要连接不同的数据库来处理不同的业务数据。以下是一个详细的多数据源配置和使用的指南。 首先,我们需要...

    MyBatis多数据源读写分离.docx

    MyBatis多数据源读写分离 MyBatis是一款流行的Java持久层框架,提供了许多强大的功能来简化数据库交互。在实际应用中,多数据源读写分离是非常常见的场景,今天我们就来讨论如何使用MyBatis实现多数据源读写分离。 ...

    springboot整合mybatis多数据源

    本文将深入探讨如何在SpringBoot项目中整合MyBatis实现多数据源的支持,帮助开发者更好地理解和运用这一技术。 一、SpringBoot简介 SpringBoot是Spring生态体系中的一个核心组件,它简化了Spring应用的初始搭建以及...

    springmvc_mybatis_多数据源

    当项目需求涉及到多个数据源时,如何在SpringMVC和MyBatis中配置和管理这些数据源就成为了一个关键问题。"springmvc_mybatis_多数据源"这个项目就是针对这种情况提供的一种解决方案。 首先,我们来看SpringMVC如何...

    springboot+mybatis多数据源,aop动态切换

    总结起来,"springboot+mybatis多数据源,aop动态切换"项目涉及了SpringBoot的自动配置、MyBatis的SQL映射、多数据源配置、AOP的动态数据源切换等关键技术。通过这些技术,开发者可以构建出高可用、高性能的分布式...

    Springboot实现mybatis多数据源配置

    本篇文章将深入探讨如何在Spring Boot项目中实现MyBatis的多数据源配置。 首先,我们要明白什么是多数据源。多数据源是指在一个应用程序中,可以同时连接并操作多个不同的数据库。这种需求通常出现在大型系统中,...

    Springboot整合Druid与Mybatis的多数据源切换

    本教程将详细介绍如何在Spring Boot项目中整合Druid数据源池与Mybatis,实现多数据源切换的功能,并提供一个亲测可用的解决方案。 首先,让我们了解Spring Boot、Druid和Mybatis这三大组件的基础知识: **Spring ...

    springboot+mybatis 多数据源 basedao +分页

    本项目涉及到的主题是“SpringBoot+MyBatis实现多数据源以及基于BaseDAO的分页功能”。 多数据源是指在一个应用中同时管理多个数据库。这在分布式系统或者需要隔离不同业务数据的场景中非常常见。SpringBoot可以...

    Springboot+MySql+Mybatis多数据源整合及其使用

    - 在Controller层,调用Service层的方法,完成对多数据源的操作。 通过以上步骤,我们就可以在Spring Boot项目中成功整合并使用多个MySQL数据源。这种方式有助于实现数据库的分库分表,提高系统性能和可扩展性。...

    SpingBoot+MyBatis+阿里双数据源框架基础

    而当涉及到多数据库环境时,如读写分离、分布式数据库等,阿里提供的数据源配置就显得尤为重要。 **SpringBoot简介** SpringBoot是Spring框架的一个模块,旨在简化Spring应用的初始搭建以及开发过程。通过“约定...

    springboot mybatis 集成多数据源 两种实现方式

    在Spring Boot应用中集成MyBatis并实现多数据源,是一种常见的需求,特别是在大型系统中,可能需要连接多个数据库以实现数据隔离或者读写分离。本文将详细介绍两种不同的实现方式,分别为静态添加和动态添加数据源。...

    mybatis+druid association 切换数据源

    在拦截器中,我们调用自定义DruidDataSource提供的方法来设置当前连接所关联的数据源。 在代码实现过程中,需要注意以下几点: 1. 确保切换数据源的逻辑是线程安全的,避免在并发环境下出现错误。 2. 保持良好的...

    Spring+SpringMvc+MybatisPlus+Aop(自定义注解)动态切换数据源

    自定义注解可以附加在方法上,当该方法被调用时,AOP会捕获这个调用并执行相应的逻辑,即切换到指定的数据源。 具体实现步骤如下: 1. 定义数据源配置:创建多个DataSource配置,每个数据源对应不同的数据库连接...

    spring boot+mybatis+druid多数据源.zip

    "spring boot+mybatis+druid多数据源.zip"的项目就是针对这样的场景设计的,它结合了Spring Boot、MyBatis和Druid这三个强大的Java框架,实现了对MySQL数据库的动态数据源管理。下面将详细解释这些技术及其在多数据...

    mybatis spring 多数据源

    标题 "mybatis spring 多数据源" 涉及到的是在Java开发中如何整合MyBatis和Spring框架,同时管理多个数据库连接源。MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射,而Spring框架则提供了...

    springboot mybatis使用动态数据源的例子

    在Spring Boot应用中,MyBatis是一个常用的持久层框架,而动态数据源则是解决多数据库环境问题的关键技术。本文将详细讲解如何在Spring Boot中结合MyBatis实现动态数据源的配置,同时涵盖MyBatis的基本使用和Email的...

    Spring Boot集成Mybatis操作多数据源(Xml文件)

    在Spring Boot应用中,集成Mybatis来操作多数据源是一项常见的需求,特别是在处理分布式系统或者高可用场景下。本文将详细讲解如何在Spring Boot项目中整合Mybatis,并使用XML文件来配置多数据源。 首先,我们需要...

Global site tag (gtag.js) - Google Analytics