解决SpringBoot集成Mybatis 配置多数据源后,打印SQL失效问题

SpringBoot集成Mybati 配置多数据源参考上一篇文章

在Spring框架中使用MyBatis时,如果配置了多数据源,可能会导致之前配置的打印SQL语句的设置失效。这通常是因为在多数据源配置中,MyBatis的SQL打印功能只对默认数据源生效,而对于其他数据源,需要手动开启SQL打印。

1. 确保你已经在application.properties或application.yml中启用了MyBatis的SQL日志打印功能

# mybatis 配置
mybatis:type-aliases-package: com.roborock.framework.entitymapper-locations: classpath*:mappers/**/*.xmlconfiguration:log-impl: org.apache.ibatis.logging.stdout.StdOutImplmap-underscore-to-camel-case: true

单数据源直接增加上面的配置mybatis.configuration.log-impl: org.apache.ibatis.logging.stdout.StdOutImpl 即可打印SQL语句

2. 多数据源时,只需要在其中的一个配置类中增加如下配置即可打印SQL语句,不需要在所有数据源配置中都增加

@Bean
@ConfigurationProperties(prefix = "mybatis.configuration")
public org.apache.ibatis.session.Configuration globalConfiguration() {return new org.apache.ibatis.session.Configuration();
}

然后在其中一个配置类的SqlSessionFactory方法中增加入参Configuration configuration,使用bean.setConfiguration(configuration)即可!

完整代码如下:

package com.study.framework.config;import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
import org.springframework.boot.context.properties.ConfigurationProperties;
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;/*** @description rbk数据源配置类*  //basePackages  自己mapper包路径*/
@Configuration
@MapperScan(basePackages = {"com.study.framework.mapper.rbkmapper"}, sqlSessionFactoryRef = "rbkSqlSessionFactory")
public class rbkDataSourceConfiguration {//配置打印SQL语句configuration@Bean@ConfigurationProperties(prefix = "mybatis.configuration")public org.apache.ibatis.session.Configuration globalConfiguration() {return new org.apache.ibatis.session.Configuration();}@Primary@Bean(name = "rbkDataSourceProperties")@ConfigurationProperties(prefix = "spring.datasource.druid.rbk")public DataSourceProperties rbkDataSourceProperties() {return new DataSourceProperties();}@Primary@Bean(name = "rbkDataSource")public DataSource storyDataSource(@Qualifier("rbkDataSourceProperties") DataSourceProperties rbkDataSourceProperties) {return rbkDataSourceProperties.initializeDataSourceBuilder().build();}@Primary@Bean("rbkSqlSessionFactory")public SqlSessionFactory rbkSqlSessionFactory(@Qualifier("rbkDataSource") DataSource rbkDataSource, 
org.apache.ibatis.session.Configuration configuration) throws Exception {SqlSessionFactoryBean bean = new SqlSessionFactoryBean();bean.setDataSource(rbkDataSource);//其中一个数据源中增加如下代码即可打印SQL语句bean.setConfiguration(configuration);bean.setMapperLocations(// 设置mybatis的xml所在位置new PathMatchingResourcePatternResolver().getResources("classpath*:mappers/rbkmapper/*.xml"));bean.setTypeAliasesPackage("com.study.framework.entity"); //自己entity包路径return bean.getObject();}@Primary@Bean(name = "rbkTransactionManager")public DataSourceTransactionManager rbkTransactionManager(@Qualifier("rbkDataSource") DataSource dataSource) {return new DataSourceTransactionManager(dataSource);}@Primary@Bean(name = "rbkSqlSessionTemplate")public SqlSessionTemplate rbkSqlSessionTemplate(@Qualifier("rbkSqlSessionFactory") SqlSessionFactory sqlSessionFactory) {return new SqlSessionTemplate(sqlSessionFactory);}}

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

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

相关文章

深度学习落地实战:人脸五官定位检测

前言 大家好,我是机长 本专栏将持续收集整理市场上深度学习的相关项目,旨在为准备从事深度学习工作或相关科研活动的伙伴,储备、提升更多的实际开发经验,每个项目实例都可作为实际开发项目写入简历,且都附带完整的代码与数据集。可通过百度云盘进行获取,实现开箱即用 …

【LeetCode】162. 寻找峰值

1. 题目 2. 分析 这道题的难点有二:第一,知道用二分法求解;第二,二分判断的标准是什么?传统的题目的二分标注都是跟某个固定的值做比较,但是此题不然。此题的比较对象是相邻的元素。 不要硬凭自己的脑子…

LeetCode第106题:从中序与后序遍历序列构造二叉树的Java实现

摘要 LeetCode第106题要求使用一棵树的中序遍历和后序遍历序列来重建二叉树。本文将介绍两种Java实现方法:递归和迭代。 1. 问题描述 给定一棵树的中序遍历和后序遍历序列,重建出这棵树的唯一二叉树结构。 2. 示例分析 输入:[1,2,4]&…

C语言·函数(超详细系列·全面总结)

前言:Hello大家好😘,我是心跳sy,为了更好地形成一个学习c语言的体系,最近将会更新关于c语言语法基础的知识,今天更新一下函数的知识点,我们一起来看看吧! 目录 一、函数是什么 &a…

vue、js截取视频任意一帧图片

html有本地上传替换部分&#xff0c;可以不看 原理&#xff1a;通过video标签对视频进行加载&#xff0c;随后使用canvas对截取的视频帧生成需要的图片 <template> <el-row :gutter"18" class"preview-video"><h4>视频预览<span&…

execv函数简单使用

在Unix-like系统中&#xff0c;execv 函数用于执行一个新的程序&#xff0c;同时可以传递参数给它。这个函数是 exec 系列函数之一&#xff0c;用于替换当前进程映像。 execv 的原型如下&#xff1a; int execv(const char *path, char *const argv[]); path&#xff1a;新程…

【边缘计算网关教程】9.对接ThingsBoard(MQTT协议)

前景回顾-【边缘计算网关教程】8.ModbusTCP采集存储Influxdb-CSDN博客 目录 需求分析 平台配置&#xff1a; 需求实现 第一步&#xff1a;采集Modbus TCP数据 第二步&#xff1a;拼接Json 第三步&#xff1a;MQTT上报 平台配置 第一步&#xff1a;添加设备 ​编辑第二…

国内新能源汽车芯片自给,承认差距,任重道远

【科技明说 &#xff5c; 科技热点关注】 据近日工信部电子五所元器件与材料研究院高级副院长罗道军表示&#xff0c;中国拥有最大的新能源车产能&#xff0c;芯片用量也是越来越多。但是芯片的自给率目前不到10%&#xff0c;是结构性的短缺。 中国拥有最大新能源车产能&#…

自学网络安全:从菜鸟到守护者的蜕变之旅

在这个数字化时代&#xff0c;网络安全不再是遥不可及的专业术语&#xff0c;而是与我们每个人的生活息息相关。随着网络攻击事件的频发&#xff0c;掌握一定的网络安全知识&#xff0c;不仅是对个人隐私的保护&#xff0c;更是对社会安全的贡献。今天&#xff0c;就让我们一起…

从太阳神到弥勒佛

对于学习英语的人来说&#xff0c;太阳神&#xff0c;最为知名的&#xff0c;就是阿波罗&#xff08;Apollo&#xff09;&#xff0c;人类最近的历史&#xff0c;最知名的&#xff0c;就是阿波罗计划。 说白了&#xff0c;阿波罗计划&#xff0c;这个音译词&#xff0c;对于英语…

用Docker来开发

未完成。。。 现在好像用Docker是越来越多了。之前其实也看过docker的原理&#xff0c;大概就是cgroup那些&#xff0c;不过现在就不看原理了&#xff0c;不谈理论&#xff0c;只看实际中怎么用&#xff0c;解决眼前问题。 用docker来做开发&#xff0c;其实就是解决的编译环境…

InceptionV3代码实现(Pytorch)

文章目录 Inception介绍InceptionV3代码实现第一步&#xff1a;定义基础卷积模块第二步&#xff1a;定义Inceptionv3模块InceptionAInceptionBInceptionCInceptionDInceptionE 第三步&#xff1a;定义辅助分类器InceptionAux第四步&#xff1a;搭建GoogLeNet网络第五步*&#x…

请你谈谈:spring bean的生命周期 - 阶段3:属性赋值(设置属性)

2024/07/17 22:17 : 两天内完成&#xff0c;敬请期待&#xff01;&#xff01;&#xff01; Spring属性赋值阶段是Spring Bean生命周期中的一个重要阶段&#xff0c;它紧随Bean的实例化之后。在这个阶段&#xff0c;Spring容器会根据BeanDefinition中定义的属性配置&#xff0…

使用 git 和 GitHub 互动

本文根据《GitHub入门与实践》整理 创建账户 要想使用GitHub那就必须先有GitHub账号,账号自行注册,不作介绍。 本地生成 SSH Key SSH 提供了一种安全的方式来通过不安全的网络进行通信。当你使用SSH key连接到GitHub时,你的身份是通过密钥对(一个公钥和一个私钥)来验…

PJA1介导的焦亡抑制是鼻咽癌产生耐药性的驱动因素

引用信息 文 章&#xff1a;PJA1-mediated suppression of pyroptosis as a driver of docetaxel resistance in nasopharyngeal carcinoma. 期 刊&#xff1a;Nature Communications&#xff08;影响因子&#xff1a;14.7&#xff09; 发表时间&#xff1a;2024年6月2…

unity 把Vuforia的Image做成预制件prefab后,通过ab加载或者其他动态加载后,扫描图片不会出现模型

//通过ab加载资源&#xff08;自己封装的ab加载的脚本&#xff09;GameObject go LoadHandle.Instance.LoadPrefab.LoadPrefabAssets("ImagePrefab");GameObject game GameObject.Instantiate(go);//加载预制件后&#xff0c;加载图片的数据库// 初始化 Vuforia I…

Lua 数组

Lua 数组 Lua 是一种轻量级的编程语言&#xff0c;广泛用于游戏开发、脚本编写和其他应用程序。在 Lua 中&#xff0c;数组是一种非常基础和重要的数据结构。本文将详细介绍 Lua 数组的概念、用法和操作方法。 数组的概念 在 Lua 中&#xff0c;数组实际上是一个列表&#x…

链接追踪系列-10.mall-swarm微服务运行并整合elk-上一篇的番外

因为上一篇没对微服务代码很详细地说明&#xff0c;所以在此借花献佛&#xff0c;使用开源的微服务代码去说明如何去做链路追踪。 项目是开源项目&#xff0c;fork到github以及gitee中&#xff0c;然后拉取到本地 后端代码&#xff1a; https://gitee.com/jelex/mall-swarm.gi…

密码学原理精解【7】

文章目录 流密码密码体制概述唯吉尼亚密码一、历史与背景二、加密算法三、特点与应用四、破译方法五、原理概述加密过程解密过程注意事项 流密码理论解释一、定义与原理二、特点与优势三、工作原理四、应用实例五、安全性与限制 RC4算法一、算法概述二、算法原理三、算法特点四…

11.FreeRTOS_事件组

事件组概述 事件组的作用&#xff1a; 可以等待某一个事件发生可以等待若干个事件发生可以等待若干个事件中的某一个事件发生 同步点是事件组的另一个使用方式&#xff0c;它可以让多个任务进行阻塞等待&#xff0c;当全部事件完成后&#xff0c;再一起解除任务的阻塞。常常…