当前位置: 代码网 > it编程>编程语言>Java > SpringBoot +MybatisPlus集成多数据源的使用案例

SpringBoot +MybatisPlus集成多数据源的使用案例

2025年05月23日 Java 我要评论
引言应项目需求,需要引入另外的mysql数据库,但是项目已经引入一个mysql,这时有几种方案通过dynamic-datasource 框架,无缝集成 但是是动态切换数据源的,跟项目需求不符合,于是采

引言

应项目需求,需要引入另外的mysql数据库,但是项目已经引入一个mysql,这时有几种方案

  • 通过dynamic-datasource 框架,无缝集成 但是是动态切换数据源的,跟项目需求不符合,于是采取第二种
  • 通过自定义数据源配置类,无缝引入多个数据源,并且基于文件目录隔离

步骤

引入依赖

项目需要引入了mybatis plus即可,无需引入额外依赖

<dependency>
    <groupid>com.baomidou</groupid>
    <artifactid>mybatis-plus-boot-starter</artifactid>
    <version>3.5.12</version>
</dependency>

修改配置文件

spring:
  datasource:
    d1:
      password: xxxx
      username: xxxx
      jdbc-url: jdbc:mysql://xxxx:3306/ecshop_wp?characterencoding=utf-8&usessl=false&servertimezone=asia/shanghai&allowpublickeyretrieval=true
      driver-class-name: com.mysql.cj.jdbc.driver
    d2:
      password: root
      username: root
      jdbc-url: jdbc:mysql://127.0.0.1:3306/xg_bi_lcc?characterencoding=utf-8&usessl=false&servertimezone=asia/shanghai&allowpublickeyretrieval=true
      driver-class-name: com.mysql.cj.jdbc.driver

添加配置类

@configuration
@mapperscan(basepackages = "xg.xx.model.front.service.mysql.mapper1", sqlsessionfactoryref = "d1sqlsessionfactory")
public class ecshopwpdatasourceconfig {
    @bean(name = "d1datasource")
    @configurationproperties(prefix = "spring.datasource.d1")
    public datasource ecshopwpdatasource() {
        return datasourcebuilder.create().build();
    }
    @bean(name = "d1sqlsessionfactory")
    public sqlsessionfactory ecshopwpsqlsessionfactory(@qualifier("d1datasource") datasource datasource) throws exception {
        mybatissqlsessionfactorybean bean = new mybatissqlsessionfactorybean();
        //configuration配置bean
        //mybatisconfiguration configuration = new mybatisconfiguration();
        //configuration.setmapunderscoretocamelcase(true);
        //configuration.setcacheenabled(false);
        // 配置打印sql语句s
        //configuration.setlogimpl(stdoutimpl.class);
        // 添加自定义sql注入
        //bean.setconfiguration(configuration);
        //插件对象
        mybatisplusinterceptor mybatisplusinterceptor = new mybatisplusinterceptor();
        //动态表名
        //dynamictablenameinnerinterceptor dynamictablenameinnerinterceptor = new dynamictablenameinnerinterceptor();
        //可以传多个表名参数,指定哪些表使用monthtablenamehandler处理表名称
        //dynamictablenameinnerinterceptor.settablenamehandler(new monthtablenamehandler("t_table_name"));
        //以拦截器的方式处理表名称
        //可以传递多个拦截器,即:可以传递多个表名处理器tablenamehandler
        //mybatisplusinterceptor.addinnerinterceptor(dynamictablenameinnerinterceptor);
        //分页插件
        mybatisplusinterceptor.addinnerinterceptor(new paginationinnerinterceptor(dbtype.mysql));
        bean.setdatasource(datasource);
        // 设置mybatis的xml所在位置
        bean.setmapperlocations(new pathmatchingresourcepatternresolver().getresources("classpath*:mybatis/d1/*.xml"));
        bean.setplugins(mybatisplusinterceptor);
        return bean.getobject();
    }
    @bean(name = "d1transactionmanager")
    public datasourcetransactionmanager ecshopwptransactionmanager(@qualifier("d1datasource") datasource datasource) {
        return new datasourcetransactionmanager(datasource);
    }
}
@configuration
@mapperscan(basepackages = "xg.xx.model.front.service.mysql.mapper2", sqlsessionfactoryref = "d2sqlsessionfactory")
public class xgbilccdatasourceconfig {
    @bean(name = "d2datasource")
    @configurationproperties(prefix = "spring.datasource.d2")
    public datasource ecshopwpdatasource() {
        return datasourcebuilder.create().build();
    }
    @bean(name = "d2sqlsessionfactory")
    public sqlsessionfactory ecshopwpsqlsessionfactory(@qualifier("d2datasource") datasource datasource) throws exception {
        mybatissqlsessionfactorybean bean = new mybatissqlsessionfactorybean();
        //configuration配置bean
        //mybatisconfiguration configuration = new mybatisconfiguration();
        //configuration.setmapunderscoretocamelcase(true);
        //configuration.setcacheenabled(false);
        // 配置打印sql语句s
        //configuration.setlogimpl(stdoutimpl.class);
        // 添加自定义sql注入
        //bean.setconfiguration(configuration);
        //插件对象
        mybatisplusinterceptor mybatisplusinterceptor = new mybatisplusinterceptor();
        //动态表名
        //dynamictablenameinnerinterceptor dynamictablenameinnerinterceptor = new dynamictablenameinnerinterceptor();
        //可以传多个表名参数,指定哪些表使用monthtablenamehandler处理表名称
        //dynamictablenameinnerinterceptor.settablenamehandler(new monthtablenamehandler("t_table_name"));
        //以拦截器的方式处理表名称
        //可以传递多个拦截器,即:可以传递多个表名处理器tablenamehandler
        //mybatisplusinterceptor.addinnerinterceptor(dynamictablenameinnerinterceptor);
        //分页插件
        mybatisplusinterceptor.addinnerinterceptor(new paginationinnerinterceptor(dbtype.mysql));
        bean.setdatasource(datasource);
        // 设置mybatis的xml所在位置
        bean.setmapperlocations(new pathmatchingresourcepatternresolver().getresources("classpath*:mybatis/d2/*.xml"));
        bean.setplugins(mybatisplusinterceptor);
        return bean.getobject();
    }
    @bean(name = "d2transactionmanager")
    public datasourcetransactionmanager ecshopwptransactionmanager(@qualifier("d2datasource") datasource datasource) {
        return new datasourcetransactionmanager(datasource);
    }
}

使用案例

@transactional

@transactional(value = "d2transactionmanager", rollbackfor = exception.class)
这样即可进行全局事物管理

到此这篇关于springboot +mybatisplus集成多数据源的文章就介绍到这了,更多相关springboot mybatisplus多数据源内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com