一.问题描述
最近接手(顶锅)了公司的框架维护工作,第一项任务就是集成dynamic多数据源框架。(dynamic官方使用文档,本文不是教学,有兴趣的小伙伴可以自己查阅文档)。集成dynamic之后,一切都很顺利,但是测试到SQLHelper框架的分页功能,出错了:SQLHelper分页功能,全部是按照dynamic指定的primary数据源来处理分页sql的。比如我配置了mysql和oracle两个数据源,并且指定mysql为primary主数据源,然后不管使用哪个数据源进行查询,SQLHelper都是按照primary指定的主数据源mysql进行分页处理,导致用oracle数据源时分页语句sql报错。
二.解决思路
1.找到分页sql的处理入口
通过断点调试,找到了SQLHelper的com.jn.sqlhelper.dialect.internal.Dialect类和处理语句有关(实际上Dialect是一个接口,抽象子类AbstractDialect的属性LimitHandler才是实际sql的逻辑处理类,processSql是处理方法入口。为了方便理解,就以Dialect概括,一个Dialect对应一种数据源的处理)

2.Dialect和databaseId有关
databaseId其实就是数据源类型,Dialect是处理sql的类,每一种数据源对应一个Dialect,通过databaseId获取对应的Diale

本文探讨了在Spring Boot项目中,如何解决在整合Dynamic Data Source和SQLHelper时遇到的分页处理问题。作者通过深入分析源码,揭示了问题根源并提出针对性的解决策略,包括绕过全局数据库ID获取和利用连接信息获取正确数据源。
最低0.47元/天 解锁文章
996





