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/zh-tw/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

發表回復

登錄後才能評論