springMVC+ Mybatis 配置多数据源

springMVC+Mybatis多数据源实现 由于项目部分功能需要,需要在原有的数据源dataSource基础上新增一个单独的数据源,在需要的地方切换,有默认值。急于这个需求,所以想到了多数据源的实现方法。配置多数据源并不复杂,主要利用spring的这个类AbstractRoutingDataSource,字面上可以看出就是数据源路由实现的一个类。1.配置文件我们在spring配置文件里面配置两个数据源,命名空间不同。 首先配置dataSou 阅读详情

如何在一个web项目中使用两个数据源,并且不同的接口可以按需选择数据库。

使用Spring提供的AbstractRoutingDataSource类来根据请求路由到不同的数据源。具体做法是
先设置两个不同的dataSource代表不同的数据源,再建一个总的dynamicDataSource,根据不同的请求去设置dynamicDataSource。代码如下:

配置文件spring-mybatis.xml

<!--统一的dataSource-->
<bean id="dynamicDataSource" class="path.to.DynamicDataSource" >
    <property name="targetDataSources">
        <map key-type="java.lang.String">
            <!--通过不同的key决定用哪个dataSource-->
            <entry value-ref="dataSource" key="dataSource"></entry>
            <entry value-ref="mssqlDataSource" key="mssqlDataSource"></entry>
        </map>
    </property>
    <!--设置默认的dataSource-->
    <property name="defaultTargetDataSource" ref="dataSource">
    </property>
</bean>

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName" value="${jdbc.driver}" />
    <property name="url" value="${jdbc.url}" />
    <property name="username" value="${jdbc.username}" />
    <property name="password" value="${jdbc.password}" />
    <!-- 初始化连接大小 -->
    <property name="initialSize" value="${jdbc.initialSize}"></property>
    <!-- 连接池最大数量 -->
    <property name="maxActive" value="${jdbc.maxActive}"></property>
    <!-- 连接池最大空闲 -->
    <property name="maxIdle" value="${jdbc.maxIdle}"></property>
    <!-- 连接池最小空闲 -->
    <property name="minIdle" value="${jdbc.minIdle}"></property>
    <!-- 获取连接最大等待时间 -->
    <property name="maxWait" value="${jdbc.maxWait}"></property>
</bean>

<!--电影票数据库是mssql2008,单独的数据库,配置如下-->
<bean id="mssqlDataSource" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName" value="${jdbc-mssql.driver}" />
    <property name="url" value="${jdbc-mssql.url}" />
    <property name="username" value="${jdbc-mssql.username}" />
    <property name="password" value="${jdbc-mssql.password}" />
    <!-- 初始化连接大小 -->
    <property name="initialSize" value="${jdbc.initialSize}"></property>
    <!-- 连接池最大数量 -->
    <property name="maxActive" value="${jdbc.maxActive}"></property>
    <!-- 连接池最大空闲 -->
    <property name="maxIdle" value="${jdbc.maxIdle}"></property>
    <!-- 连接池最小空闲 -->
    <property name="minIdle" value="${jdbc.minIdle}"></property>
    <!-- 获取连接最大等待时间 -->
    <property name="maxWait" value="${jdbc.maxWait}"></property>
</bean>

<!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dynamicDataSource" />
    <!-- 自动扫描mapping.xml文件 -->
    <property name="mapperLocations" value="classpath:path/to/mapping/*.xml"></property>
</bean>

<!-- DAO接口所在包名,Spring会自动查找其下的类 -->
<bean id="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="path.to.dao" />
    <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
</bean>

<!-- (事务管理)transaction manager, use JtaTransactionManager for global tx -->
<bean id="transactionManager"
    class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dynamicDataSource" />
</bean>

DynamicDataSource.java

public class DynamicDataSource extends AbstractRoutingDataSource {
    @Override
    protected Object determineCurrentLookupKey() {
        return CustomerContextHolder.getCustomerType();
    }
}

CustomerContextHolder.java

public class CustomerContextHolder {
    public static final String DATA_SOURCE_MYSQL = "dataSource";
    public static final String DATA_SOURCE_MSSQL = "mssqlDataSource";
    //用ThreadLocal来设置当前线程使用哪个dataSource
    private static final ThreadLocal<String> contextHolder = new ThreadLocal<String>();
    public static void setCustomerType(String customerType) {
        contextHolder.set(customerType);
    }
    public static String getCustomerType() {
        String dataSource = contextHolder.get();
        if (StringUtils.isEmpty(dataSource)) {
            return DATA_SOURCE_MYSQL;
        }else {
            return dataSource;
        }
    }
    public static void clearCustomerType() {
        contextHolder.remove();
    }
}

ServiceImpl.java

CustomerContextHolder.setCustomerType(CustomerContextHolder.DATA_SOURCE_MSSQL);

值得注意的是在CustomerContextHolder.java中使用了ThreadLocal类的set方法来设置当前线程要选择的dataSource,看一下set方法的源码:

ThreadLocal.set()

public void set(T value) {
    Thread t = Thread.currentThread();
    ThreadLocalMap map = getMap(t);
    if (map != null)
        map.set(this, value);
    else
        createMap(t, value);
}
pi-star图形界面安装指南 pi-star图形界面安装指南,MMDVM热点安装,树莓派3B+热点 阅读详情

相关推荐

Spring Boot整合AWS S3文件上传实战:从配置到权限管理全流程解析

本文详细解析了Spring Boot整合AWS S3文件上传的全流程,包括基础配置、核心上传功能实现、高级权限控制及安全最佳实践。通过实战案例展示如何高效处理文件上传、大文件分片及权限管理,帮助开发者构建健壮的文件管理系统。特别强调AWS S3的高可用性和安全性,适用于企业级应用开发。

sam99的博客 283

Spring mvc+Mybatis 配置多数据源

用途:当一个程序中(或同一个service中)需要同时调用多个数据库的数据时,就需要在程序中配置多数据源。 用我项目中的例子打比方 我需要同时连接mysql库和oracle库,两个库的dao分别在不通的文件夹中 注意:不通数据源的dao文件最好分开两个不同的包中,在同一包中的话上一个数据源扫描会覆盖下一个,也就是说在上个数据源中找下个数据源中的表,当然会找不到。 1.配置 在spri...

不抛弃、不放弃:Aaron莫言 1217

微信小程序-如何根据缩放屏幕大小自适应icon图标更改marker

微信小程序如何根据用户的缩放屏幕来改变marker图标icon的大小,实现icon自适应屏幕缩放的效果

Bartender_VA11的博客 3980

spring+springmvc+mybatis整合多数据源

spring+springmvc+mybatis整合多数据源 项目结构图: 创建DataSourceContextHolder类 public class DataSourceContextHolder { private static final ThreadLocal<String> contextHolder = new ThreadLocal<String>(); public static void setDbType(String dbType) {

Ztvue的博客 415

保姆级教程:在Ubuntu 22.04上用Conda搞定nuPlan数据集环境(Python 3.9 + PyTorch)

本文提供了一份详细的Ubuntu 22.04环境下使用Conda配置nuPlan自动驾驶数据集的保姆级教程,涵盖Python 3.9安装、Conda环境管理、PyTorch配置及数据集可视化验证等关键步骤,帮助开发者高效搭建开发环境。

weixin_29061997的博客 254

C++上机——2023年“信息与未来”小学生编程思维展示官方题解

本次活动前三题是“根据问题描述实现代码”类型的问题,题解和示例代码由人工智能GPT-4直接阅读题面后生成――只要熟悉C++的语法和基本的编程、调试,即可解决p1、p2、p3。后三题有一定的算法性,我们给出命题思路和一些可能的解法。注意:本题解是面向指导教师的;指导教师在讲解时可以根据学生掌握程度进行调整。

qq_39127687的博客 2296

SpringMVC+Mybatis配置多数据源

业务场景: 在实际项目开发中,有时候数据会存放在多个数据库中即存在不同的数据源。那么在SSM框架中,如何配置多个数据库呢? 准备: 两个Oracle数据源 DataSource1:172.83.242.145:1521/orcl 用户名:ZSYW_JR 密码:****** DataSource2:172.83.30.209:1521/orcl 用户名:ydpt  密码:******* ...

崔向阳@李晓的博客 2140

【好物推荐】MQTTX 快速入门使用指南

摘要:MQTTX是一款跨平台MQTT客户端工具,支持MQTT 5.0/3.1.1协议,提供桌面版、网页版和CLI版本。本文介绍了快速入门指南,包括下载安装、核心概念解释、连接公共MQTT服务器(broker.emqx.io)的步骤,以及订阅主题、发布和接收消息的操作流程。文章还提供了常见问题排查方法,帮助用户快速完成MQTT开发调试的基本操作。

奶爸的编程之路,也就一周冷个三天 860

【详解】JavaSpringMVC+MyBitis+多数据源切换

创建一个动态数据源类​​,并定义一个注解​​来指定数据源。@Override创建一个线程本地变量​​来保存当前的数据源。

牛肉胡辣汤 1453

企业AI数据资产评估的自动化工具:AI应用架构师的使用指南

在AI驱动的企业数字化转型中,数据资产是支撑模型训练、业务决策的核心燃料。然而,80%的AI项目失败源于数据问题——低质量数据导致模型偏差、未评估的风险引发合规危机、价值不明确的数据浪费资源。手动数据资产评估效率低、易出错,无法满足规模化AI应用需求。本文将以AI应用架构师的视角,拆解企业数据资产评估的核心逻辑,用"餐厅选食材"的生活化比喻解释复杂概念,结合自动化工具的技术原理与实战案例,教你如何从0到1搭建数据资产评估体系。无论是数据质量检测、价值量化还是风险防控,你都能找到可落地的工具方案与实践步骤。

2502_91592937的博客 1629

使用Simulink来模拟多旋翼无人机在风扰动条件下的飞行情况,并分析其稳定性

本教程详细介绍了使用Simulink进行多旋翼无人机风扰动稳定性分析的完整流程。首先构建包含飞行器动力学模型、控制系统和环境模拟模块的系统框架,重点讲解简化动力学方程的实现方法。随后指导设计PID控制器来维持姿态稳定,并添加随机风扰动模型模拟环境干扰。通过设置输入信号和输出显示,最终实现对不同风速条件下无人机控制性能的评估。该实例为无人机控制系统设计提供了实用的仿真方法,强调利用MATLAB工具进行可视化分析和参数优化,以提高系统抗干扰能力和稳定性。

amy_mhd的博客 418

mybatis + springMVC 多数据源,及事务配置

之前写过一种多数据源配置的方式,但是那种方式对代码入侵性比较大,详情请查阅 mybatis + spring 多数据源跨库查询 最近在做 springMVC 搭建时,更改了新的实现,并且提供多数据源中单个数据源事务的支持 下面直接放完整代码: web.xml 配置 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-in

cdmamata的专栏 9375

超详细的Burp Suite安装使用

‌Burp Suite是一个强大的Web应用安全测试工具,适用于网络安全专业人士进行自动化网络应用程序的安全测试。‌ 它提供了在Windows和Kali Linux上安装和激活Burp Suite Professional的简便步骤,帮助用户快速集成并启用强大的网络扫描和渗透测试功能。Burp Suite的特点包括易于安装、良好的兼容性、内置的自动化工具、优秀的用户体验以及详细的教程,使得无论是安全领域的新手还是经验丰富的专家,都能轻松上手并高效地进行安全测试。此外,Burp Suite还支持扩展功能的使用

Dreams°的博客 2641

SpringMVC+Mybatis 多数据源配置

(Notice:以下所有经验也是我根据网上的经验整理的,如有侵权可以联系我删除,Wx:IT_Ezra,QQ 654303408。 有问题讨论也可联系我,QQ同上。) 总所周知,随着业务的发展,数据应用压力逐渐增大,特别是数据库。不论从读写分离还是分库的方法来提高应用的性能,都需要涉及到多数据源问题。本文主要介绍在Spring MVC+Mybatis下的多数据源配置。 本文多数据源配置的实现,是基于...

IT_EZRA的博客 512

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

SpringMVC和SpringBoot整合mybatis以及多数据源配置

1.SpringMVC整合MyBatis及多数据源配置 1.1pom.xml文件引入mybatis配置 <!-- mysql --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactI...

现场喷口水的专栏 673

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

【Java】一次SpringMVC+ Mybatis 配置多数据源经历

【Java】一次SpringMVC+ Mybatis 配置多数据源经历 现在在维护的是学校的一款信息服务APP的后台,最近要开发一些新功能,其中一个就是加入学校电影院的在线购票。在线购票实际上已经有一套系统了,但是是外包给别人开发的,我们拿不到代码只能拿到数据库,并且也不一定能很好的兼容之前的代码,所以需要基于这个数据库来进行新的开发。现在用的后台是SpringMV

chengwangbaiko的博客 5173

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

springboot+mybatis配置多数据源_SpringMVC和SpringBoot整合mybatis以及多数据源配置

1.SpringMVC整合MyBatis及多数据源配置1.1pom.xml文件引入mybatis配置 mysql mysql-connector-java ${mysql.version} org.mybatis mybatis ${mybatis-version} org.myb...

weixin_39690972的博客 161

SpringBoot如何整合SpringMVC的拦截器、数据源、Mybatis以及配置多数据源

System.out.println("MyInterceptor -url= "+request.getRequestURL()); return true; } } 2. Config配置类 package com.lsh.config; import com.lsh.interceptor.MyInterceptor; import org.springframework.context.annotation.Configuration; import org.springframework.web.

m0_64867152的博客 287

6.dubbo常用的xml配置有哪些_SpringMVC和SpringBoot整合mybatis以及多数据源配置

1.SpringMVC整合MyBatis及多数据源配置1.1pom.xml文件引入mybatis配置 mysql mysql-connector-java ${mysql.version} org.mybatis mybatis ${mybatis-version} org.myb...

weixin_39938724的博客 151

springMVC mybatis 多数据源配置

springMVC mybatis 多数据源配置

独孤行风的博客 1万+

springmvc+mybatis配置多数据源

要使用SpringMVC配置多个数据源,最主要的类是MultipleDataSource 首先在spring.xml中增加一个dataSource的bean &lt;bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close" ...

Mario_Hu的博客 415

SpringMVC + Mybatis 多数据源配置

比较常用的配置,多数据源、主从等等。 大概的逻辑是: 1、spring-mybatis.xml中配置多个数据源 2、使用Spring提供的AbstractRoutingDataSource类来根据请求路由到不同的数据源 3、ThreadLocal解决线程安全问题 详情参考: 【Java】一次SpringMVC+ Mybatis 配置多数据源经历 利用Spring的Abstr...

ann49988的博客 189

springmvc+mybatis多数据源配置,AOP注解动态切换数据源

springmvc与springboot没多大区别,springboot一个jar包配置几乎包含了所有springmvc,也不需要繁琐的xml配置,springmvc需要配置多种jar包,需要繁琐的xml配置,当然springmvc也可以使用java类来配置,但这种感觉没有xml配置来的直观。springboot+mybatis多数据源看这里下面是springmvc+mybatis动态多数据源完整...

xiaosheng_papa的专栏 4372

SpringMVC+mybatis配置多数据源

正常的逻辑高设多个dataSource,并注入相应的dao,dao注入相应的mapping. jdbc.properties mypt.url=jdbc:mysql://192.168.1.42:3306/epi_ningxia_utf8_test?useUnicode=true&allowMultiQueries=true&characterEncoding=u...

weixin_30639719的博客 157
上一篇: 线程之间的通信
下一篇: 【LeetCode】178.分数排名
rmnjava
博客等级 码龄20年 8粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值