mybatis多数据源切换

1.前提
项目中有可能需要去其他的数据库取其他的表的信息

2.思路
2.1 直接使用原生jdbc(不推荐)
2.2 不使用我们全局配置的mybatis,对指定文件夹下使用我们指定的Session

3.解决办法

指定该配置的范围

package com.maycur.openapi.dao.mybatis.jde.config;import com.maycur.openapi.dao.mybatis.BaseDataSourceConfiguration;
import com.maycur.openapi.dao.mybatis.interceptor.ParamInterceptor;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;import javax.sql.DataSource;
import java.sql.SQLException;@Configuration
@MapperScan(basePackages = "com.maycur.openapi.dao.mybatis.jde", sqlSessionTemplateRef = "jdeSessionTemplate")
public class JdeConfiguration extends BaseDataSourceConfiguration {private static final Logger logger = LoggerFactory.getLogger(JdeConfiguration.class);@AutowiredJdeDataSourceProperties properties;@Bean(name = "jdeDataSource")public DataSource getDataSource() throws SQLException {DataSource dataSource = buildDataSource(properties);logger.info("jdeDataSource init,url");return dataSource;}@Bean(name = "jdeDataSourceTransactionManager")public DataSourceTransactionManager transactionManager(@Qualifier("jdeDataSource") DataSource dataSource) throws SQLException {return new DataSourceTransactionManager(dataSource);}@Bean(name = "jdeSqlSessionFactory")public SqlSessionFactory sqlSessionFactory(@Qualifier("jdeDataSource") DataSource dataSource) throws Exception {SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();sessionFactory.setDataSource(dataSource);//指定作用范围sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:com/maycur/openapi/dao/mybatis/jde/mapper/*.xml"));sessionFactory.setTypeHandlersPackage("com.maycur.openapi.dao.mybatis.typehandler");sessionFactory.setPlugins(new ParamInterceptor());return sessionFactory.getObject();}@Bean(name = "jdeSessionTemplate")public SqlSessionTemplate sessionTemplate(@Qualifier("jdeSqlSessionFactory") SqlSessionFactory sqlSessionFactory) {return new SqlSessionTemplate(sqlSessionFactory);}
}
package com.maycur.openapi.dao.mybatis;import com.alibaba.druid.pool.DruidDataSource;import javax.sql.DataSource;
import java.sql.SQLException;/*** @author gy* @date 2/21/22 1:35 PM*/
public class BaseDataSourceConfiguration {public DataSource buildDataSource(BaseDataSourceProperties properties) throws SQLException {DruidDataSource dataSource = new DruidDataSource();dataSource.setDriverClassName(properties.getDriverClassName());dataSource.setUrl(properties.getUrl());dataSource.setUsername(properties.getUsername());dataSource.setPassword(properties.getPassword());dataSource.setInitialSize(properties.getInitialSize());dataSource.setMinIdle(properties.getMinIdle());dataSource.setMaxActive(properties.getMaxActive());dataSource.setMaxWait(properties.getMaxWait());dataSource.setMinEvictableIdleTimeMillis(properties.getMinEvictableIdleTimeMillis());dataSource.setTimeBetweenEvictionRunsMillis(properties.getTimeBetweenEvictionRunsMillis());dataSource.setValidationQuery(properties.getValidationQuery());dataSource.setTestWhileIdle(properties.isTestWhileIdle());dataSource.setTestOnBorrow(properties.isTestOnBorrow());dataSource.setTestOnReturn(properties.isTestOnReturn());dataSource.setDbType(properties.getDbType());dataSource.setFilters(properties.getFilters());return dataSource;}}

读取配置文件中的配置项

package com.maycur.openapi.dao.mybatis.jde.config;import com.maycur.openapi.dao.mybatis.BaseDataSourceProperties;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;@Component
@ConfigurationProperties(prefix = JdeDataSourceProperties.PREFIX)
public class JdeDataSourceProperties extends BaseDataSourceProperties {public static final String PREFIX = "jde.datasource";
}
package com.maycur.openapi.dao.mybatis;import lombok.Data;/*** @author gy* @date 2/21/22 1:34 PM*/
@Data
public class BaseDataSourceProperties {private String url;private String username;private String password;private String driverClassName;private ClassLoader classLoader;private int initialSize;private int minIdle;private int maxActive;private long maxWait;private long timeBetweenEvictionRunsMillis;private long minEvictableIdleTimeMillis;private String validationQuery;private boolean testWhileIdle;private boolean testOnBorrow;private boolean testOnReturn;private String filters;private String dbType;}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/719024.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

『Linux从入门到精通』第 ㉓ 期 - 管道

文章目录 💐专栏导读💐文章导读🐧进程间通信的目的🐧如何进行进程间通信🐧进程间通信的分类🐧管道🐦什么是管道🐦管道原理 🐧实例代码🐧管道的特点&#x1f4…

Protobuf学习笔记以及序列化的一些概念要点(暂放C++笔记专栏)

Protobuf学习笔记以及序列化的一些概念要点 —— 杭州 2024-03-03 文章目录 Protobuf学习笔记以及序列化的一些概念要点1.Protobuf概念2.实际测试2.1.准备一个test.proto2.2.使用 protoc 命令行工具来编译一个 Protocol Buffers 文件 test.proto3.3.创建一个main.cpp写C++代码…

mysql 事务的隔离级别

一、事务的隔离级别要解决的问题: 1)脏读:读到了其它事务未提交的数据即脏读,未提交意味着数据有可能会被回滚,也就是最终有可能不会存储到数据库中,即读到了最终不一定存在存在的数据,即为脏读…

如何选择程序员职业赛道:挑战与机遇并存的职业探索指南

程序员如何选择职业赛道? 作为程序员,选择职业赛道是一项重要的决策,不仅影响你的职业发展,也影响着你的工作生活。本文将为你介绍如何选择程序员职业赛道,以及每个方向的特点、挑战和机遇,帮助你做出明智…

《极客时间 - 左耳听风》【文章笔记 + 个人思考】

《极客时间 - 左耳听风》 原文链接 :https://time.geekbang.org/column/intro/100002201?tabcatalog 备注:加粗部分为个人思考 01 | 程序员如何用技术变现?(上) 备注:加粗部分为个人思考) 01 | 程序员如何…

Window系统部署Splunk Enterprise并结合内网穿透实现远程访问本地服务

文章目录 前言1. 搭建Splunk Enterprise2. windows 安装 cpolar3. 创建Splunk Enterprise公网访问地址4. 远程访问Splunk Enterprise服务5. 固定远程地址 前言 本文主要介绍如何简单几步,结合cpolar内网穿透工具实现随时随地在任意浏览器,远程访问在本地…

【24最新版PythonPycharm安装教程】小白保姆级别安装教程

今天,我就来教大家一下,如何去安装Python! 需要博主打包好的一键激活版Pycharm&&Python也可扫下方直接获取 ​ 1 了解Python Python是一种面向对象的解释型计算机程序设计语言,由荷兰人Guido van Rossum于1989年发明&…

[C++]使用纯opencv去部署yolov9的onnx模型

【介绍】 部署 YOLOv9 ONNX 模型在 OpenCV 的 C 环境中涉及一系列步骤。以下是一个简化的部署方案概述,以及相关的文案。 部署方案概述: 模型准备:首先,你需要确保你有 YOLOv9 的 ONNX 模型文件。这个文件包含了模型的结构和权…

Flutter Gradle下载失败的解决方案

Flutter Gradle可能会由于网络原因下载失败,这个时候我们可以首先下载Gradle,然后再进行配置。具体步骤如下: 第一步:下载对应版本的gradle 可以通过下面地址下载,也可以百度里面搜对应的版本 【极速下载】gradle各版本快速下载地…

【HTML】HTML基础2(一些常用标签)

目录 例子 首先是网页图标 然后是一些常用标签 插入图片 例子 <!DOCTYPE html> <html><head><link rel"icon" href"img/银河护卫队-星爵.png" type"image/x-icon"><meta charset"utf-8"><title>…

大数据的分类分级管理

一.背景 为了公司给的师带徒&#xff0c;为培训写点材料。让徒弟做事情要有章法&#xff0c;有行业视野&#xff0c;知道方向和资料从哪里去找。 二.参考标准 要管理企业的大数据&#xff0c;从什么地方开始呢&#xff1f;首先应该完成企业数据的分类、分级&#xff0c;或者参…

一文掌握python常用的dict(字典)操作

目录 一、字典的创建与基本特性 1.创建字典 2.字典的基本特性 二、字典的常用操作 1.访问字典中的值 2.添加、修改键值对 3.删除键值对 4.获取字典中的所有键、值和键值对 5.遍历字典 6.查找键是否存在 7.使用 get() 方法获取值 8.合并字典 9.字典排序 10.使用字…

如何限制一个账号只在一处登陆

大家好&#xff0c;我是广漂程序员DevinRock&#xff01; 1. 需求分析 前阵子&#xff0c;和问答群里一个前端朋友&#xff0c;随便唠了唠。期间他问了我一个问题&#xff0c;让我印象深刻。 他问的是&#xff0c;限制同一账号只能在一处设备上登录&#xff0c;是如何实现的…

Javascript:数组的使用

目录 一、前言 二、正文 三、结语 一、前言 为了能存储多个数据&#xff0c;我们接下来介绍数组。 二、正文 数组是一种将一组数据存储在单个变量名下的方式。 let arr[] 声明语法: let 数组名[数据1,数据2,..数据n] 例 let names[小明,小刚,小红,小丽] 数组是按顺序保存…

【大厂AI课学习笔记NO.56】(9)模型评测

作者简介&#xff1a;giszz&#xff0c;腾讯云人工智能从业者TCA认证&#xff0c;信息系统项目管理师。 博客地址&#xff1a;https://giszz.blog.csdn.net 声明&#xff1a;本学习笔记来自腾讯云人工智能课程&#xff0c;叠加作者查阅的背景资料、延伸阅读信息&#xff0c;及学…

Python采集学习笔记-request的get请求和post请求

使用http://httpbin.org测试,一个简单的 HTTP 请求和响应服务。(需联网)1.导入requests包 import requests 2.测试get请求 url http://httpbin.org/get par {key1: value1, key2: value2} # 不带参数请求 r1 requests.get(url) # 带参数请求 r2 requests.get(url, paramspa…

甘特图资源视图和任务视图的区别

甘特图(Gantt chart)是一种常用的项目管理工具,用于直观地展示项目的进度和各项任务的时间安排。甘特图包含资源视图和任务视图两种视角。 一个项目的甘特图demo &#xff1a; https://zz-plan.com/share/87f1340286f1343ba5 资源视图主要显示项目中不同资源的分配和利用情况…

植物神经功能紊乱患者,家属应该怎么照顾!

植物神经功能紊乱181-01-317-367&#xff0c;通常被称为植物人状态&#xff0c;是指由严重脑部受损引起的意识丧失、无法自主呼吸、难以醒来或维持清醒状态的一种严重健康状况。植物神经功能紊乱患者通常面临长期卧床、意识不清、无法言语交流等严重问题&#xff0c;需要家属的…

代码随想录算法训练营Day 36 | LeetCode435. 无重叠区间、LeetCode763.划分字母区间、LeetCode56. 合并区间

LeetCode435. 无重叠区间 和上题引爆气球的逻辑非常像&#xff0c;只要想到左边界排序之后&#xff0c;更新右边界为最小值&#xff0c;则就可以轻松写出代码&#xff0c;如果按照右边界来排序&#xff0c;则就可以省去取最小值的逻辑。 代码如下&#xff1a;时间复杂度O(nlo…

【内推】金山办公 2024届 春季校园招聘

有需要内推的小伙伴吗&#xff1f; 金山办公 各岗位均有 面向应届生春招 QQ群&#xff1a;723529936 内推码&#xff1a;NTASYQI