当前位置:首页 > Java技术 > mybatis配置多数据源(利用spring的AbstractRoutingDataSource)

mybatis配置多数据源(利用spring的AbstractRoutingDataSource)

2022年11月06日 22:04:32Java技术8

主要是利用了spring的AbstractRoutingDataSource。

直接上配置了:

  1. spring-mybatis.xml
    <bean name="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
          init-method="init" destroy-method="close">
        <property name="url" value="${db_url}" />
        <property name="username" value="${db_username}" />
        <property name="password" value="${db_password}" />
        <property name="initialSize" value="1" />
        <property name="maxActive" value="20" />
        <property name="minIdle" value="1" />
        <property name="maxWait" value="60000" />
        <property name="poolPreparedStatements" value="true" />
        <property name="maxPoolPreparedStatementPerConnectionSize" value="33" />
        <property name="validationQuery" value="${validationQuery}" />
        <property name="testOnBorrow" value="false" />
        <property name="testOnReturn" value="false" />
        <property name="testWhileIdle" value="true" />
        <property name="timeBetweenEvictionRunsMillis" value="60000" />
        <property name="minEvictableIdleTimeMillis" value="25200000" />
        <property name="removeAbandoned" value="true" />
        <property name="removeAbandonedTimeout" value="1800" />
        <property name="logAbandoned" value="true" />
        <property name="filters" value="mergeStat" />
    </bean>

    <bean name="dataSource2" class="com.alibaba.druid.pool.DruidDataSource"
          init-method="init" destroy-method="close">
        <property name="url" value="${financial_model_url}" />
        <property name="username" value="${financial_model_username}" />
        <property name="password" value="${financial_model_password}" />
        <property name="initialSize" value="10" />
        <property name="maxActive" value="20" />
        <property name="minIdle" value="20" />
        <property name="maxWait" value="60000" />
        <property name="poolPreparedStatements" value="false" />
        <property name="maxPoolPreparedStatementPerConnectionSize" value="33" />
        <property name="validationQuery" value="${validationQuery}" />
        <property name="testOnBorrow" value="false" />
        <property name="testOnReturn" value="false" />
        <property name="testWhileIdle" value="true" />
        <property name="timeBetweenEvictionRunsMillis" value="60000" />
        <property name="minEvictableIdleTimeMillis" value="25200000" />
        <property name="removeAbandoned" value="true" />
        <property name="removeAbandonedTimeout" value="1800" />
        <property name="logAbandoned" value="true" />
        <property name="filters" value="mergeStat" />
    </bean>

    <bean name="dataSource3" class="com.alibaba.druid.pool.DruidDataSource"
          init-method="init" destroy-method="close">
        <property name="url" value="${oracle.jdbc.url}" />
        <property name="username" value="${oracle.jdbc.username}" />
        <property name="password" value="${oracle.jdbc.password}" />
        <property name="initialSize" value="1" />
        <property name="maxActive" value="20" />
        <property name="minIdle" value="1" />
        <property name="maxWait" value="60000" />
        <property name="poolPreparedStatements" value="true" />
        <property name="maxPoolPreparedStatementPerConnectionSize" value="33" />
        <property name="validationQuery" value="${orcale.validationQuery}" />
        <property name="testOnBorrow" value="false" />
        <property name="testOnReturn" value="false" />
        <property name="testWhileIdle" value="true" />
        <property name="timeBetweenEvictionRunsMillis" value="60000" />
        <property name="minEvictableIdleTimeMillis" value="25200000" />
        <property name="removeAbandoned" value="true" />
        <property name="removeAbandonedTimeout" value="1800" />
        <property name="logAbandoned" value="true" />
        <property name="filters" value="mergeStat" />
    </bean>

    <bean id="multipleDataSource" class="com.utils.MultipleDataSource">
        <property name="targetDataSources">
            <map>
                <entry key="dataSource" value-ref="dataSource"/>
                <entry key="dataSource2" value-ref="dataSource2"/>
                <entry key="dataSource3" value-ref="dataSource3"/>
            </map>
        </property>
        <property name="defaultTargetDataSource" ref="dataSource2"></property>
    </bean>

 

MultipleDataSource.java

public class MultipleDataSource extends AbstractRoutingDataSource {

    @Override
    protected Object determineCurrentLookupKey() {
        // TODO Auto-generated method stub

        return DataSourceTypeManager.get();
    }

}
DataSourceTypeManager.java(为了避免多个线程间造成并发问题,用了线程本地变量)

public class DataSourceTypeManager {

    //
    public static final String DS_BIO = "dataSource";
    //
    public static final String DS_MODEL = "dataSource2";
    //
    public static final String DS_ORACLE_RD = "dataSource3";


    private static final ThreadLocal<String> dataSourceKey = new ThreadLocal<String>(){
       /* @Override
        protected String initialValue(){
            return DS_SUNGBIO;
        }*/
    };

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

    public static void reset(){
        dataSourceKey.set(DS_BIO);
    }

    public static void cleanDataSource(){
        dataSourceKey.remove();
    }
}

使用方法:

使用前,手动写:

DataSourceTypeManager.setDataSourceKey(DataSourceTypeManager.DS_MODEL);

嫌麻烦的话,也可以像如下参考文章,配置注解,然后增加aop:

http://www.cnblogs.com/davidwang456/p/4318303.html

作者:三国梦回
来源链接:https://www.cnblogs.com/grey-wolf/p/6962869.html

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/java/68253.html

标签: MyBatisSpring
分享给朋友:

“mybatis配置多数据源(利用spring的AbstractRoutingDataSource)” 的相关文章

Mybatis分页插件PageHelper的使用

Mybatis分页插件PageHelper的使用

开头语 上回书说到:将SpringBoot和持久层框架Mybtais进行简单整合,整合时,使用了Mybatis的分页插件PageHelper,但并未介绍如何使用该分页插件,本次讲解PageHelper的常见的使用方法,请大家提意见 什么是PageHelper 在使用Java语言开发项目...

Spring Cloud面试问题

Spring Cloud面试问题

问:什么是Spring Cloud?     答: Spring Cloud Stream App Starters是基于Spring Boot的Spring Integration应用程序,提供与外部系统的集成。Spring Cloud Task。...

Spring Cloud实战|3.SpringCloud 整合common模块

Spring Cloud实战|3.SpringCloud 整合common模块

手把手教你从0开始搭建spring cloud alibaba 脚手架,关注公众号“AI码师” 获取项目完整源码 视频地址:视频教程 创建新模块 ams-common 当前目录结构 基础包封装 引入必备依...

Spring Boot WebFlux 集成 Mongodb 数据源操作

Spring Boot WebFlux 集成 Mongodb 数据源操作

WebFlux 整合 Mongodb 前言 上一讲用 Map 数据结构内存式存储了数据。这样数据就不会持久化,本文我们用 MongoDB 来实现 WebFlux 对数据源的操作。 什么是 MongoDB ? 官网:https://...

Spring Cloud 学习推荐

学习 Spring Boot Spring tutorials | Java Web Development, Spring Cloud Programming tutorials Spring Boot为您提供了Spring Framewo...

Spring Batch 读 10 万条记录,写到 MongoDB

实践内容 从 MariaDB 一张表内读 10 万条记录,经处理后写到 MongoDB 。 具体实现 1、新建 Spring Boot 应用,依赖如下: <!-- Web 应用 -->...

Spring是什么

简单的讲,Spring是一个轻量级的应用程序开发框架。它除了帮助我们管理对象及其依赖关系。还提供了像通用日志记录、性能统计、安全控制、异常处理等面向切面的能力,还能帮我管理最头疼的数据库事务,本身提供了一套简单的JDBC访问实现,提供了与第三方数据访问框架集成(如Hibernate,J...

springboot集成activiti工作流时容易出现的问题

No.1 启动报错 org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.activiti.spring.boot.SecurityAutoCo...

( 十三 ) SpringBoot 【日志一】统一日志框架

( 十三 ) SpringBoot 【日志一】统一日志框架

( 十三 ) SpringBoot 【日志一】统一日志框架 ( 十三 ) SpringBoot 【日志一】统一日志框架     1、简介       在项目开发中,日志十分的重要,不管是记录运行...

当spring 对象@Autowired 注入失败或者创建对象Bean失败、No qualifying bean/Error creating bean 的失败情形分析和解决方案

   错误信息 今天开发的过程中突然出现如下错误: Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean o...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。