SpringBoot+mybatis+pgsql多个数据源配置

一、配置文件

jdk环境:1.8 配置了双数据源springboot+druid+pgsql,application.properties配置修改如下:

#当前入库主数据库
spring.primary.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.primary.datasource.driver-class-name=org.postgresql.Driver
spring.primary.datasource.url=jdbc:postgresql://localhost:5432/testdb
spring.primary.datasource.username=postgres
spring.primary.datasource.password=postgres
#
#从数据库
spring.secondary.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.secondary.datasource.driver-class-name=org.postgresql.Driver
spring.secondary.datasource.url=jdbc:postgresql://localhost:5432/postgres
spring.secondary.datasource.username=postgres
spring.secondary.datasource.password=postgresspring.datasource.druid.initial-size=5
spring.datasource.druid.min-idle=5
spring.datasource.druid.max-active=20

二、Java代码配置新增

主数据库注入

/*** @Author yang* @Date 2023/2/20 11:10* @Version 1.0*/
import com.alibaba.druid.pool.DruidDataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;import javax.sql.DataSource;@Configuration
@MapperScan(basePackages = MasterDataSourceConfig.PACKAGE, sqlSessionFactoryRef = "masterSqlSessionFactory")
public class MasterDataSourceConfig {// 精确到master目录,以便跟其他数据源隔离static final String PACKAGE = "com.xx.dao.master";static final String MAPPER_LOCATION = "classpath*:com/xx/mapper/master/*.xml";@Value("${spring.primary.datasource.url}")private String url;@Value("${spring.primary.datasource.username}")private String user;@Value("${spring.primary.datasource.password}")private String password;@Value("${spring.primary.datasource.driver-class-name}")private String driverClass;private SqlSessionFactory mSessionFactory;@Bean(name = "masterDataSource")@Primarypublic DataSource masterDataSource() {DruidDataSource dataSource = new DruidDataSource();dataSource.setDriverClassName(driverClass);dataSource.setUrl(url);dataSource.setUsername(user);dataSource.setPassword(password);return dataSource;}@Bean(name = "masterTransactionManager")@Primarypublic DataSourceTransactionManager masterTransactionManager() {return new DataSourceTransactionManager(masterDataSource());}@Bean(name = "masterSqlSessionFactory")@Primarypublic SqlSessionFactory masterSqlSessionFactory(@Qualifier("masterDataSource") DataSource masterDataSource)throws Exception {final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();sessionFactory.setDataSource(masterDataSource);sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(MasterDataSourceConfig.MAPPER_LOCATION));//开启驼峰sessionFactory.getObject().getConfiguration().setMapUnderscoreToCamelCase(true);this.mSessionFactory = sessionFactory.getObject();return sessionFactory.getObject();}/*** 获取主库 SessionFactory* @return*/public SqlSessionFactory getMSessionFactory(){return mSessionFactory;}}

从数据库Java代码:

/*** @Author yang* @Date 2023/2/20 11:52* @Version 1.0*/
@Configuration
// 扫描 Mapper 接口并容器管理
@MapperScan(basePackages = SecondDataSourceConfig.PACKAGE, sqlSessionFactoryRef = "secondSqlSessionFactory")
public class SecondDataSourceConfig {//精确到第二个数据库目录,以便跟其他数据源隔离static final String PACKAGE = "com.xx.dao.second";static final String MAPPER_LOCATION = "classpath*:com/xx/mapper/second/*.xml";@Value("${spring.secondary.datasource.url}")private String url;@Value("${spring.secondary.datasource.username}")private String user;@Value("${spring.secondary.datasource.password}")private String password;@Value("${spring.secondary.datasource.driver-class-name}")private String driverClass;@Bean(name = "secondDataSource")public DataSource clusterDataSource() {DruidDataSource dataSource = new DruidDataSource();dataSource.setDriverClassName(driverClass);dataSource.setUrl(url);dataSource.setUsername(user);dataSource.setPassword(password);return dataSource;}@Bean(name = "secondTransactionManager")public DataSourceTransactionManager clusterTransactionManager() {return new DataSourceTransactionManager(clusterDataSource());}@Bean(name = "secondSqlSessionFactory")public SqlSessionFactory clusterSqlSessionFactory(@Qualifier("secondDataSource") DataSource clusterDataSource)throws Exception {final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();sessionFactory.setDataSource(clusterDataSource);sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(SecondDataSourceConfig.MAPPER_LOCATION));//开启驼峰sessionFactory.getObject().getConfiguration().setMapUnderscoreToCamelCase(true);return sessionFactory.getObject();}
}

三、mapper接口、mybatis/xml文件配置

     这里就就不一一贴代码了,主要是接口对应mybatis xml配置文件。项目文件接口如下:

创建成以上目录就可以了,分别是dao接口、Java数据源配置、mybatis映射文件。

四、怎么使用

      通过以上配置文件和代码已经对两个数据源进行分割,直接正常使用访问代码即可,比如dao里面创建了testClass的操作

void insert(Test test);
void delete();Controller层我们通过@Autowired注解 使用就可以了。

这里需要注意修改:

@MapperScan里面的basePackages

MAPPER_LOCATION变量的配置,这里主要是不同的数据源配置扫描不同的mybatis配置文件

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

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

相关文章

Python|爬虫和测试|selenium框架模拟登录示例(一)

前言: 上一篇文章Python|爬虫和测试|selenium框架的安装和初步使用(一)_晚风_END的博客-CSDN博客 大概介绍了一下selenium的安装和初步使用,主要是打开某个网站的主页,基本是最基础的东西,那么,…

如何使用CSS实现一个平滑滚动到页面顶部的效果(回到顶部按钮)?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 平滑滚动到页面顶部的效果(回到顶部按钮)⭐ 创建HTML结构⭐ 编写CSS样式⭐ 编写JavaScript函数⭐ 添加滚动事件监听器⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右…

【golang】panic函数、recover函数以及defer语句

从panic被引发到程序终止运行的大致过程是什么? 大致过程: 某个函数中的某行代码有意无意地引发了一个panic。这时,初始的panic详情会被建立起来,并且该程序的控制权会立即从从行代码转移至调用其所属函数的那行代码上&#xff…

【原创】jmeter并发测试计划

bankQPS 创建线程组 设置并发参数 HTTP请求GET 添加HTTP请求 GET请求 查看结果树 HTTP请求 POST 添加HTTP请求 参数必须设置头信息格式: 添加HTTP头信息 查看结果树 可以选择,仅查看错误日志 汇总报告

华为数通方向HCIP-DataCom H12-821题库(单选题:81-100)

第81题 某公司新购入一台网络设备,作为网络管理员,初次配置该设备通常通过什么方式? A、FTP B、Telnet C、SNMP D、Console 口登录 答案: D 解析: 通常情况下,初次配置网络设备会通过Console口登录的方式进行。Console口是一种串口接口&#xff0c…

[Linux]进程控制

[Linux]进程控制 文章目录 [Linux]进程控制进程退出情况分类进程退出码的理解进程退出方式进程等待 进程退出情况分类 进程正常执行完成 运行结果正确运行结果错误 进程异常终止 – (进程产生错误后,收到了操作系统的信号) 进程退出码的理解 进程主体功能执行完毕…

提升Java开发效率:掌握HashMap的常见方法与基本原理

文章目录 前言一、概述1. 认识HashMap2. HashMap 的作用和重要性3. 简要讲解 HashMap 的基本原理和实现方式 二、了解 HashMap 创建及其的常见操作方法1. HashMap的创建2. 添加元素 put()3. 访问元素 get()4. 删除元素 remove()5. 计算大小 size()6. 迭代 HashMap for-each7.判…

深度学习11:Transformer

目录 什么是 Transformer? Encoder Decoder Attention Self-Attention Context-Attention 什么是 Transformer(微软研究院笨笨) RNN和Transformer区别 Universal Transformer和Transformer 区别 什么是 Transformer? ​ …

习题练习 C语言(暑期第二弹)

编程能力小提升! 前言一、表达式判断二、Assii码的理解应用三、循环跳出判断四、数字在升序数组中出现的次数五、整数转换六、循环语句的应用七、函数调用八、两个数组的交集九、C语言基础十、图片整理十一、数组的引用十二、数组的引用十三、字符个数统计十四、多数…

【考研数学】矩阵、向量与线性方程组解的关系梳理与讨论

文章目录 引言一、回顾二、梳理齐次线性方程组非齐次线性方程组 写在最后 引言 两个原因让我想写这篇文章,一是做矩阵题目的时候就发现这三货经常绑在一起,让人想去探寻其中奥秘;另一就是今天学了向量组的秩,让我想起来了之前遗留…

初阶数据结构(六)队列的介绍与实现

💓博主csdn个人主页:小小unicorn💓 ⏩专栏分类:C 🚚代码仓库:小小unicorn的学习足迹🚚 🌹🌹🌹关注我带你学习编程知识 栈 队列的介绍队列的概念:队…

H5商城公众号商城系统源码 积分兑换商城系统独立后台

网购商城系统源码 积分兑换商城系统源码 独立后台附教程 测试环境:NginxPHP7.0MySQL5.6thinkphp伪静态

剑指 Offer 43. 1~n 整数中 1 出现的次数

目录 ​编辑 一,问题描述 二,例子 三,题目接口 四,题目解答 1,暴力解法 2.规律解法 总结: 代码: 一,问题描述 输入一个整数 n ,求1~n这n个整数的十进…

2023高教社杯数学建模思路 - 复盘:人力资源安排的最优化模型

文章目录 0 赛题思路1 描述2 问题概括3 建模过程3.1 边界说明3.2 符号约定3.3 分析3.4 模型建立3.5 模型求解 4 模型评价与推广5 实现代码 建模资料 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 1 描述 …

1. 卷积原理

① 卷积核不停的在原图上进行滑动,对应元素相乘再相加。 ② 下图为每次滑动移动1格,然后再利用原图与卷积核上的数值进行计算得到缩略图矩阵的数据,如下图右所示。 import torch import torch.nn.functional as Finput torch.tensor([[1, 2…

mysql并行效率提升

下面是一个并行读取mysql数据库表的测试程序,测试结果发现,读取10个表,1个个读取,和并行读取10个,效率一样,甚至并行读取还慢很多,这是为什么? con get_db_conn() results {} poo…

布隆过滤器

目录 初识布隆过滤器使用布隆过滤器布隆过滤器如何实现布隆过滤器使用场景布隆过滤器存在问题解决策略 初识布隆过滤器 布隆过滤器(Bloom Filter)是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一…

具有优异导电性能且抑制了准饱和效应的1200V 4H-SiC沟槽MOSFET

标题:1200V 4H-SiC trench MOSFET with superior figure of merit and suppressed quasi-saturation effect 摘要 本文提出一种具有部分被埋层n区包围的p屏蔽区的优异性能(FoM)1200V 4H-SiC沟槽MOSFET。在准饱和(QS)状态下,埋层n区抑制由p屏蔽区形成的耗…

异地访问Oracle数据库的解决方案:利用内网穿透实现PL/SQL远程连接的建议与步骤

文章目录 前言1. 数据库搭建2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射 3. 公网远程访问4. 配置固定TCP端口地址4.1 保留一个固定的公网TCP端口地址4.2 配置固定公网TCP端口地址4.3 测试使用固定TCP端口地址远程Oracle ​ 小月糖糖主页 在强者的眼中,没有最…

【C++】特殊类的设计

特殊类的设计 前言正式开始设计一个类,不能被拷贝设计一个类,只能在堆上创建对象设计一个类,只能在栈上创建对象设计一个类,不能被继承设计一个类,只能创建一个对象(单例模式)饿汉模式懒汉模式总结 前言 点进来的同学…