Mybatis多数据源配置

一、Mybatis多数据源配置失效

在使用Mybatis配置多数据源的过程中,可能会出现配置失效的情况。这可能是由于以下原因导致的:

1. 数据源配置错误;

2. Mybatis版本不兼容;

3. 数据库连接池配置错误;

4. Mybatis配置文件错误。

以下为解决方案:

1. 检查数据源配置是否正确,比如用户名、密码、数据库名等;

2. 确认所使用的Mybatis版本是否兼容多数据源配置;

3. 检查数据库连接池配置是否正确,确认连接数、最大连接数是否适当;

4. 检查Mybatis配置文件是否正确,确认多数据源配置是否正确。

二、Mybatis多数据源配置实现

Mybatis多数据源配置方式有多种,可以通过配置XML文件或通过Java配置类实现。以下是通过XML文件实现的示例:


# 配置文件database.properties
db.driverClassName=com.mysql.jdbc.Driver
db.url=jdbc:mysql://localhost:3306/db1?useSSL=false&characterEncoding=utf-8&serverTimezone=GMT%2B8
db.username=username1
db.password=password1

db2.driverClassName=com.mysql.jdbc.Driver
db2.url=jdbc:mysql://localhost:3306/db2?useSSL=false&characterEncoding=utf-8&serverTimezone=GMT%2B8
db2.username=username2
db2.password=password2


# Mybatis配置文件

  
  
  
  



  
  
  
  


三、Mybatis多数据源

Mybatis多数据源配置有许多优势,包括但不限于:

1. 数据分离;

2. 多租户支持;

3. 性能优化。

Mybatis多数据源配置需要使用到多个数据源,每个数据源都需要配置数据库连接池。以下是一个常用的实现方式:


@Configuration
@MapperScan(basePackages = {"com.example.dao"})
@EnableTransactionManagement
public class MybatisConfig {
 
    @Bean(name = "db1")
    @ConfigurationProperties(prefix = "spring.datasource.db1")
    public DataSource dataSource1() {
        return DataSourceBuilder.create().build();
    }
 
    @Bean(name = "db2")
    @ConfigurationProperties(prefix = "spring.datasource.db2")
    public DataSource dataSource2() {
        return DataSourceBuilder.create().build();
    }
 
    @Bean
    public DataSource dynamicDataSource(@Qualifier("db1") DataSource db1,
                                         @Qualifier("db2") DataSource db2) {
        Map targetDataSources = new HashMap();
        targetDataSources.put("db1", db1);
        targetDataSources.put("db2", db2);
 
        DynamicDataSource dynamicDataSource = new DynamicDataSource();
        dynamicDataSource.setTargetDataSources(targetDataSources);
        dynamicDataSource.setDefaultTargetDataSource(db1);
        return dynamicDataSource;
    }
 
    @Bean
    public SqlSessionFactory sqlSessionFactory(@Qualifier("dynamicDataSource") DataSource dynamicDataSource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dynamicDataSource);
        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/*.xml"));
        return bean.getObject();
    }
 
    @Bean
    public PlatformTransactionManager transactionManager(@Qualifier("dynamicDataSource") DataSource dynamicDataSource) {
        return new DataSourceTransactionManager(dynamicDataSource);
    }
}


四、Mybatis多数据源切换

在实际应用中,可能需要根据情况动态切换数据源,以下是一个典型的切换方式:


public class DataSourceContextHolder {
 
    /**
     * 默认数据源
     */
    public static final String DEFAULT_DS = "db1";
 
    private static final ThreadLocal contextHolder = new ThreadLocal();
 
    public static void setDataSource(String dbType) {
        contextHolder.set(dbType);
    }
 
    public static String getDataSource() {
        return contextHolder.get();
    }
 
    public static void clearDataSource() {
        contextHolder.remove();
    }
}


@Aspect
@Component
public class DataSourceAspect {
 
    @Pointcut("@annotation(com.example.annotation.DataSource)")
    public void dataSourcePointCut() {
 
    }
 
    @Around("dataSourcePointCut()")
    public Object around(ProceedingJoinPoint point) throws Throwable {
        MethodSignature signature = (MethodSignature) point.getSignature();
        DataSource dataSource = signature.getMethod().getAnnotation(DataSource.class);
        if (dataSource == null) {
            DataSourceContextHolder.setDataSource(DataSourceContextHolder.DEFAULT_DS);
        } else {
            DataSourceContextHolder.setDataSource(dataSource.value());
        }
 
        try {
            return point.proceed();
        } finally {
            DataSourceContextHolder.clearDataSource();
        }
    }
}

五、Mybatis plus官网

Mybatis plus是一个为Mybatis框架增加更多实用功能的扩展库,其官网提供了详细的使用文档和示例:

https://mp.baomidou.com/guide/

六、Mybatis plus数据源

Mybatis plus数据源的实现和Mybatis多数据源的实现类似,只需要在配置文件中指定数据源即可:


spring.datasource.dynamic.primary=db1
spring.datasource.dynamic.datasource.db1.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.dynamic.datasource.db1.url=jdbc:mysql://localhost:3306/db1?useSSL=false&characterEncoding=utf-8&serverTimezone=GMT%2B8
spring.datasource.dynamic.datasource.db1.username=username1
spring.datasource.dynamic.datasource.db1.password=password1

spring.datasource.dynamic.datasource.db2.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.dynamic.datasource.db2.url=jdbc:mysql://localhost:3306/db2?useSSL=false&characterEncoding=utf-8&serverTimezone=GMT%2B8
spring.datasource.dynamic.datasource.db2.username=username2
spring.datasource.dynamic.datasource.db2.password=password2

七、Mybatisplus事务配置

Mybatisplus的事务配置需要使用到Spring事务管理器,具体实现方法如下:


@Configuration
public class TransactionConfig {
 
    @Autowired
    private DataSource dataSource;
 
    @Bean
    public DataSourceTransactionManager transactionManager() {
        return new DataSourceTransactionManager(dataSource);
    }
 
    @Bean
    public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}

以上就是关于Mybatis多数据源配置的详细说明,希望对大家有所帮助。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/196968.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-03 13:29
下一篇 2024-12-03 13:29

相关推荐

  • 理解Mybatis中的SQL Limit用法

    Mybatis是一种非常流行的ORM框架,提供了SQL映射配置文件,可以使用类似于传统SQL语言的方式编写SQL语句。其中,SQL的Limit语法是一个非常重要的知识点,能够实现分…

    编程 2025-04-29
  • Mybatis中update if详解

    一、if标签的基本用法 在Mybatis中使用update语句更新数据库表中的一条或多条数据,我们通常通过if标签来动态生成update语句。if标签的使用方法如下: <up…

    编程 2025-04-25
  • Mybatis-plus条件构造器

    一、可重用性 Mybatis-plus作为Mybatis的扩展工具,提供了丰富的功能让开发更加高效便捷。其中之一的条件构造器可以帮助我们构建各种查询条件,而且支持链式调用,非常适合…

    编程 2025-04-25
  • Mybatis批量插入操作

    一、基本概念 Mybatis是一种基于java的持久层框架,旨在帮助开发人员简化数据库操作。该框架提供了多种方式来执行数据库操作,其中包括批量插入。批量插入是一种在单个事务中提交多…

    编程 2025-04-25
  • MyBatis如何防止SQL注入

    MyBatis是一款开源的持久层框架,它可以简化Java应用程序中的数据持久化过程,并提供了许多有用的功能。然而,安全问题一直是Web应用程序的一大挑战,其中最严重的问题之一是SQ…

    编程 2025-04-25
  • Mybatis-plus 日志详解

    一、日志框架概述 1、什么是日志框架 日志框架是一个用于管理日志的工具,使用日志框架可以帮助开发人员记录程序运行时产生的信息、警告和错误消息。常用的日志框架有log4j和logba…

    编程 2025-04-24
  • Mybatis Plus分页失效问题及解决方案

    一、分页失效的原因 Mybatis Plus是一款优秀的ORM框架,使用简单方便。但是,在使用它进行分页时,有时会出现分页失效的问题,原因可能有以下几个方面: 1、Mybatis …

    编程 2025-04-24
  • MyBatis.NET

    MyBatis.NET是一个优秀的.NET ORM框架,它将对象映射成为数据库中的记录,不需要编写SQL语句,并具有良好的性能和灵活性。 一、简介 MyBatis.NET集成了面向…

    编程 2025-04-23
  • Mybatis分页查询SQL详解

    一、Mybatis分页查询介绍 Mybatis是一款优秀的持久层框架,支持动态SQL和参数映射等功能,而分页查询也是其中非常重要的功能之一。 分页查询是指将大量的数据按照需要的记录…

    编程 2025-04-23
  • Mybatis的优点

    一、简化SQL编写 Mybatis是一种基于Java语言的持久层框架,可以避免传统 JDBC 编程中,大量繁琐的、重复的代码,使得 SQL 语句的编写更为简单和方便。开发者只需要定…

    编程 2025-04-13

发表回复

登录后才能评论