mybatis(plus)多数据源

这篇具有很好参考价值的文章主要介绍了mybatis(plus)多数据源。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

     一个项目大部分都是单一数据库多一些,但是有时候会需要用多个库,所以这时候据需要使用多数据源。我这里使用springboot+mybatis(plus)+druid多数据源.

目前我知道有两种方式,一种方式是需要在service实现类上添加@DS,一种方式是通过配置的方式,配置不同的SqlSessionFactory实现。

1. 第一种方式

  这种方式主要通过配置不同的SqlSessionFactory实现。

1.1 引入依赖

 <dependencies>
        <!--        第一步:选择ORM框架,使用springboot整合mybatis-plus依赖包-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.1</version>
        </dependency>
        <!--        第二步:选择数据库驱动,这里是Mysql所以就选择Mysql的驱动,PG的就选择PG-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.28</version>
        </dependency>
        <!--        第三步(可选):数据库连接池,可以使用druid的连接池。springboot-jdbc已经默认依赖了Hikari的连接池-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.2.8</version>
        </dependency>
    </dependencies>

 1.2 增加配置

#druid数据库链接池配置
spring:
  datasource:
    #1.JDBC
    type: com.alibaba.druid.pool.DruidDataSource
    druid:
      myboot:
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://localhost:3306/myboot?useUnicode=true&characterEncoding=utf8
        username: root
        password: root
      mydatabase:
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://localhost:3306/mydatabase?useUnicode=true&characterEncoding=utf8
        username: root
        password: root

1.3 配置myboot的源连接

@Configuration
@MapperScan(basePackages = "com.lx.mybatisplus.myboot.mappers", sqlSessionTemplateRef = "mybootSqlSessionTemplate")
public class MyBootDataSourceConfig {


    @Bean(name = "myboot")
    @ConfigurationProperties(prefix = "spring.datasource.druid.myboot")
    public DruidDataSource myboot() {
        DruidDataSource myboot = new DruidDataSource();
        return myboot;
    }

    @Primary
    @Bean("mybootSqlSessionFactory")
    public SqlSessionFactory psiSqlSessionFactory() throws Exception {
        MybatisSqlSessionFactoryBean factoryBean = new MybatisSqlSessionFactoryBean();
        factoryBean.setDataSource(myboot());

        MybatisConfiguration configuration = new MybatisConfiguration();
        configuration.setDefaultScriptingLanguage(MybatisXMLLanguageDriver.class);
        configuration.setJdbcTypeForNull(JdbcType.NULL);
        factoryBean.setConfiguration(configuration);
        //指定xml路径.
//        factoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:com/a/b/c/d/e/psi/mapper/*Dao.xml"));

        //这里可以设置MetaObjectHandler
        GlobalConfig globalConfig = new GlobalConfig();
        globalConfig.setMetaObjectHandler(new MetaObjectHandler() {
            @Override
            public void insertFill(MetaObject metaObject) {

            }

            @Override
            public void updateFill(MetaObject metaObject) {

            }
        });
        factoryBean.setGlobalConfig(globalConfig);
        return factoryBean.getObject();
    }

    @Bean("mybootTransactionManager")
    @Primary
    // 数据源事务管理器
    public DataSourceTransactionManager mybootTransactionManager(@Qualifier("myboot") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }


    @Primary
    @Bean("mybootSqlSessionTemplate")
    public SqlSessionTemplate psiSqlSessionTemplate() throws Exception {
        SqlSessionTemplate template = new SqlSessionTemplate(psiSqlSessionFactory()); // 使用上面配置的Factory
        return template;
    }
}

 1.4 配置mydatabase的源连接

@Configuration
@MapperScan(basePackages = "com.lx.mybatisplus.mydatabase.mappers", sqlSessionTemplateRef = "mydatabaseSqlSessionTemplate")
public class MyDataBaseDataSourceConfig {

    @Primary
    @Bean(name = "mydatabase")
    @ConfigurationProperties(prefix = "spring.datasource.druid.mydatabase")
    public DruidDataSource mydatabase() {
        return new DruidDataSource();
    }

    @Bean("mydatabaseSqlSessionFactory")
    public SqlSessionFactory mydatabaseSqlSessionFactory() throws Exception {
        MybatisSqlSessionFactoryBean factoryBean = new MybatisSqlSessionFactoryBean();
        factoryBean.setDataSource(mydatabase());

        MybatisConfiguration configuration = new MybatisConfiguration();
        configuration.setDefaultScriptingLanguage(MybatisXMLLanguageDriver.class);
        configuration.setJdbcTypeForNull(JdbcType.NULL);
        factoryBean.setConfiguration(configuration);
        return factoryBean.getObject();
    }

    @Bean("mydatabaseTransactionManager")
    // 数据源事务管理器
    public DataSourceTransactionManager mydatabaseTransactionManager(@Qualifier("mydatabase") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    @Bean("mydatabaseSqlSessionTemplate")
    public SqlSessionTemplate b2bSqlSessionTemplate() throws Exception {
        SqlSessionTemplate template = new SqlSessionTemplate(mydatabaseSqlSessionFactory()); // 使用上面配置的Factory
        return template;
    }
}

因为是两个源,所以使用了两个事务管理。需要使用 @Transcational() 注解来使用事务管理器。
但是我们实际上注册了两个, 如果不指定事务管理器的,
springboot是不知道该使用那个的。
不过我们在注册的时候,在 @Bean(name = "mybootTransactionManager"), 这一行下面使用了 @Primary 注解。所以我们的spring会默认使用 mybootTransactionManager这个事务管理器。

如果当你需要用到 另一个事务管理器的时候,你需要在你的 @Transcational 注解中指定事务管理器名称
ps: 使用事务的方法或者类上指定事务管理器。

@Transactional(readOnly = true, transactionManager = "mybootTransactionManager")
@Transactional(readOnly = true, transactionManager = "mydatabaseTransactionManager")

这样就配置完成了,因为指定了basePackages 对应的sqlSessionTemplateRef,所以就可以区分不同的源配置了

2.第二种方式

 这种方式主要使用@DS注解,在使用的地方指定就行

2.1 依赖

 <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
            <version>3.5.0</version>
        </dependency>

 2.2 配置文件

#druid数据库链接池配置
spring:
  datasource:
    #1.JDBC
    type: com.alibaba.druid.pool.DruidDataSource
    druid:
      myboot:
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://localhost:3306/myboot?useUnicode=true&characterEncoding=utf8
        username: root
        password: root
      mydatabase:
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://localhost:3306/mydatabase?useUnicode=true&characterEncoding=utf8
        username: root
        password: root

2.3 在service实现类上添加@DS

@Service
@DS("myboot")
public class ProductServiceImpl extends ServiceImpl<ProductMapper,Product> implements ProductService {
}
@Service
@DS("mydatabase")
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
}

这样就完成了配置不同源,但是这种方式局限性太大,所以建议还是使用第一种方式。

参考:

Springboot+mybatis(plus)+druid多数据源 - 知乎

Java学习 --- mybatisplus配置多数据源_鸭鸭老板的博客-CSDN博客_mybatisplus多数据源配置文章来源地址https://www.toymoban.com/news/detail-457128.html

到了这里,关于mybatis(plus)多数据源的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • springBoot-Mybatis-Plus 多数据源切换实现

    前言:本文主要通过AbstractRoutingDataSource,实现根据 http 访问携带的标识动态切换数据源; 1 AbstractRoutingDataSource 介绍: AbstractRoutingDataSource 是 Spring 框架中的一个抽象类,它可以用来实现动态数据源切换。在多数据源场景下,AbstractRoutingDataSource 可以根据不同的请求来动态地选

    2024年02月03日
    浏览(52)
  • Springboot 配置动态多数据源(Mybatis-plus)

    前言:在项目中需要用到动态切换多数据源,查阅Mybatis-plus文档得知可以通过@DS注解,但该方法主要针对不同内容的数据源,而目前场景是相同内容的数据库需要在运行时根据请求头动态切换,因此文档方法不适用。 注意,不要使用dynamic-datasource-spring-boot-starter依赖包。 应用

    2024年02月12日
    浏览(42)
  • 手搭手入门Mybatis-Plus配置多数据源

    https://baomidou.com/ 为简化开发而生 MyBatis-Plus(opens new window)(简称 MP)是一个 MyBatis (opens new window) 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。 无侵入 :只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑 损耗小 :启动即会自

    2024年02月07日
    浏览(42)
  • grpc + springboot + mybatis-plus 动态配置数据源

    前言 这是我在这个网站整理的笔记,关注我,接下来还会持续更新。 作者:神的孩子都在歌唱 1.1 项目初始化 项目初始化的时候会调用com.baomidou.dynamic.datasource.DynamicRoutingDataSource对象的addDataSource方法添加数据源,数据源存进dataSourceMap中。 1.2 接口请求时候 进行数据操作时,

    2024年02月09日
    浏览(42)
  • SpringBoot整合Mybatis-Plus、Druid配置多数据源

    目录 1.初始化项目 1.1.初始化工程 1.2.添加依赖 1.3.配置yml文件 1.4.Spring Boot 启动类中添加 @MapperScan 注解,扫描 Mapper 文件夹 1.5.配置使用数据源 1.5.1.注解方式 1.5.2.基于AOP手动实现多数据源原生的方式 2.结果展示 Mybatis-Plus:简介 | MyBatis-Plus (baomidou.com) 在正式开始之前,先初始

    2024年02月11日
    浏览(48)
  • SpringBoot整合Mybatis-Plus+Druid实现多数据源

    🌺本文主要讲解 springboot +mybatisplus + druid 实现多数据源配置功能 🌺 主页传送门:📀 传送 Spring Boot:    Spring Boot是一个基于Spring框架的开源Java开发框架,旨在简化Spring应用程序的开发、配置和部署。它提供了一种快速、敏捷的方式来构建独立的、生产级别的Spring应用程

    2024年02月09日
    浏览(104)
  • 【SpringBoot 3.x】整合Mybatis-Plus多数据源、Druid

    开发依赖 版本 Spring Boot 3.0.6 Mybatis-Plus 3.5.3.1 dynamic-datasource-spring-boot-starter 3.6.1 JDK 20 SpringBoot启动类修改 由于排除了DruidDataSourceAutoConfigure类的自动装载,就需要手工指定装配以下几个类 查看DruidDataSourceAutoConfigure这个类的源码可以看出,需要把@Import带进来的几个类进行自动装

    2024年02月04日
    浏览(52)
  • Dynamic DataSource 多数据源配置【 Springboot + DataSource + MyBatis Plus + Druid】

    MybatisPlus多数据源配置主要解决的是多数据库连接和切换的问题。在一些大型应用中,由于数据量的增长或者业务模块的增多,可能需要访问多个数据库。这时,就需要配置多个数据源。 2.1.1、引用依赖 2.1.2、application.yml 配置 2.1.3、通用配置类 2.1.4、使用方式 这里便不过多的

    2024年02月03日
    浏览(48)
  • SpringBoot+MyBatis-Plus多数据源@DS注解失效的解决方法

    引入 dynamic-datasource: application.yml 数据源配置: 详细使用请看 MyBatis-Plus官网 这种场景还是比较常见,比如在一个为master数据源的调用slave数据源就会失效 slave数据源Service方法 mater数据源Service方法调用slave数据源Service方法 这里会出现没有走slave_1,依然还是master数据源 需要在

    2024年01月18日
    浏览(52)
  • java_Springboot_Mybatis-Plus_自定义多数据源MybatisSqlSessionFactoryBean配置

    需要在服务中集成表结构维护的功能,维护表结构就需要使用具有执行DDL脚本权限的账号。 为了保证系统的安全性,考虑在工程中配置多个数据源引入不同权限账号,高权限账号只在特定逻辑中使用,其它默认业务使用低权限账号。 加入新的数据源不能影响已有的功能,保

    2024年01月16日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包