国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Mybatis-plus動態(tài)數(shù)據(jù)源

這篇具有很好參考價值的文章主要介紹了Mybatis-plus動態(tài)數(shù)據(jù)源。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

由于服務沒有做微服務部署,需要在后臺管理系統(tǒng)訪問其他服務的庫,所以需要用到動態(tài)數(shù)據(jù)源切換

引入依賴

mybatis-plus動態(tài)數(shù)據(jù)源依賴

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

更改配置

spring:
  application:
    name: appName
  datasource:
    dynamic:
      # 指定默認數(shù)據(jù)源
      primary: aaaa1
      strict: false
      datasource:
        # 配置第一個數(shù)據(jù)源
        aaaa1:
          driverClassName: com.mysql.cj.jdbc.Driver
          url: jdbc:mysql://host:3306/xxx?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true
          username: username
          password: password
        # 配置第二個數(shù)據(jù)源 
        aaaa2:
          driverClassName: com.mysql.cj.jdbc.Driver
          url: jdbc:mysql://host:3306/xxx?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true
          username: username
          password: password

    druid:
      # 初始連接數(shù)
      initialSize: 5
      # 最小連接池數(shù)量
      minIdle: 10
      # 最大連接池數(shù)量
      maxActive: 20
      # 配置獲取連接等待超時的時間
      maxWait: 60000
      # 配置間隔多久才進行一次檢測,檢測需要關閉的空閑連接,單位是毫秒
      timeBetweenEvictionRunsMillis: 60000
      # 配置一個連接在池中最小生存的時間,單位是毫秒
      minEvictableIdleTimeMillis: 300000
      # 配置一個連接在池中最大生存的時間,單位是毫秒
      maxEvictableIdleTimeMillis: 900000
      # 配置檢測連接是否有效
      validationQuery: SELECT 1 FROM DUAL
      testWhileIdle: true
      testOnBorrow: false
      testOnReturn: false
      webStatFilter:
        enabled: true
      statViewServlet:
        enabled: true
        # 設置白名單,不填則允許所有訪問
        allow:
        url-pattern: /druid/*
        # 控制臺管理用戶名和密碼
      #        login-username: login-username
      #        login-password: login-password
      filter:
        stat:
          enabled: true
          # 慢SQL記錄
          log-slow-sql: true
          slow-sql-millis: 1000
          merge-sql: true
        wall:
          config:
            multi-statement-allow: true

配置類

package com.ruoyi.framework.config;

import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import com.ruoyi.common.utils.StringUtils;
import org.apache.ibatis.io.VFS;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.boot.autoconfigure.SpringBootVFS;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.core.io.DefaultResourceLoader;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;
import org.springframework.core.type.classreading.CachingMetadataReaderFactory;
import org.springframework.core.type.classreading.MetadataReader;
import org.springframework.core.type.classreading.MetadataReaderFactory;
import org.springframework.util.ClassUtils;

import javax.sql.DataSource;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;

/**
 * Mybatis支持*匹配掃描包
 *
 * @author ruoyi
 */
@Configuration
public class MyBatisConfig {
    @Autowired
    private Environment env;

    static final String DEFAULT_RESOURCE_PATTERN = "**/*.class";

    public static String setTypeAliasesPackage(String typeAliasesPackage) {
        ResourcePatternResolver resolver = (ResourcePatternResolver) new PathMatchingResourcePatternResolver();
        MetadataReaderFactory metadataReaderFactory = new CachingMetadataReaderFactory(resolver);
        List<String> allResult = new ArrayList<String>();
        try {
            for (String aliasesPackage : typeAliasesPackage.split(",")) {
                List<String> result = new ArrayList<String>();
                aliasesPackage = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX
                        + ClassUtils.convertClassNameToResourcePath(aliasesPackage.trim()) + "/" + DEFAULT_RESOURCE_PATTERN;
                Resource[] resources = resolver.getResources(aliasesPackage);
                if (resources != null && resources.length > 0) {
                    MetadataReader metadataReader = null;
                    for (Resource resource : resources) {
                        if (resource.isReadable()) {
                            metadataReader = metadataReaderFactory.getMetadataReader(resource);
                            try {
                                result.add(Class.forName(metadataReader.getClassMetadata().getClassName()).getPackage().getName());
                            } catch (ClassNotFoundException e) {
                                e.printStackTrace();
                            }
                        }
                    }
                }
                if (result.size() > 0) {
                    HashSet<String> hashResult = new HashSet<String>(result);
                    allResult.addAll(hashResult);
                }
            }
            if (allResult.size() > 0) {
                typeAliasesPackage = String.join(",", (String[]) allResult.toArray(new String[0]));
            } else {
                throw new RuntimeException("mybatis typeAliasesPackage 路徑掃描錯誤,參數(shù)typeAliasesPackage:" + typeAliasesPackage + "未找到任何包");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return typeAliasesPackage;
    }

    public Resource[] resolveMapperLocations(String[] mapperLocations) {
        ResourcePatternResolver resourceResolver = new PathMatchingResourcePatternResolver();
        List<Resource> resources = new ArrayList<Resource>();
        if (mapperLocations != null) {
            for (String mapperLocation : mapperLocations) {
                try {
                    Resource[] mappers = resourceResolver.getResources(mapperLocation);
                    resources.addAll(Arrays.asList(mappers));
                } catch (IOException e) {
                    // ignore
                }
            }
        }
        return resources.toArray(new Resource[resources.size()]);
    }

    @Bean
    public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
        String typeAliasesPackage = env.getProperty("mybatis.typeAliasesPackage");
        String mapperLocations = env.getProperty("mybatis.mapperLocations");
        String configLocation = env.getProperty("mybatis.configLocation");
        typeAliasesPackage = setTypeAliasesPackage(typeAliasesPackage);
        VFS.addImplClass(SpringBootVFS.class);
        
        // 注意這里使用的是MybatisSqlSessionFactoryBean而不是SqlSessionFactoryBean
        final MybatisSqlSessionFactoryBean sessionFactory = new MybatisSqlSessionFactoryBean();
        sessionFactory.setDataSource(dataSource);
        sessionFactory.setTypeAliasesPackage(typeAliasesPackage);
        sessionFactory.setMapperLocations(resolveMapperLocations(StringUtils.split(mapperLocations, ",")));
        sessionFactory.setConfigLocation(new DefaultResourceLoader().getResource(configLocation));
        sessionFactory.setPlugins(new MybatisSqlLoggerInterceptor());
        return sessionFactory.getObject();
    }
}

添加注解

@DS注解我一般放在dao層,因為覺得這樣更合理

Mybatis-plus動態(tài)數(shù)據(jù)源,mybatis,數(shù)據(jù)庫,spring

啟動測試

問題:

動態(tài)數(shù)據(jù)源切換時效

當服務層接口添加事務注解,動態(tài)數(shù)據(jù)源切換就會失效,并且會使用默認的主數(shù)據(jù)源

批量處理接口異常

當dao層具體實現(xiàn)繼承了BaseMapper并且服務處使用IService去實現(xiàn),在批量處理時候就會出現(xiàn)異常,此時可以通過更改配置解決

使用 MybatisSqlSessionFactoryBean 替換?SqlSessionFactoryBean

Mybatis-plus動態(tài)數(shù)據(jù)源,mybatis,數(shù)據(jù)庫,spring

參開原文:mybatis-plus框架TABLE_INFO_CACHE獲取不到對應的TableInfo對象_error: can not execute. because can not find cache-CSDN博客

?

?另一種方式實現(xiàn)(未測試):https://www.cnblogs.com/zhaww/p/12706941.html

根據(jù)Mybatis-plus配置動態(tài)數(shù)據(jù)源-從數(shù)據(jù)庫獲取源_mybatis plus 攔截器怎么獲取當前數(shù)據(jù)庫類型-CSDN博客?文章來源地址http://www.zghlxwxcb.cn/news/detail-848984.html

到了這里,關于Mybatis-plus動態(tài)數(shù)據(jù)源的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • Mybatis-plus多數(shù)據(jù)源單元測試@MybatisPlusTest

    mybatis-plus多數(shù)據(jù)源單元測試報錯 錯誤原因分析 多數(shù)據(jù)源,但是不能取到數(shù)據(jù)信息 解決方案 在注解中添加 @ImportAutoConfiguration(value = {RmasDataSourceConfig.class}, exclude = DataSourceAutoConfiguration.class) 注意事項 1.@Test添加以后,沒有啟動鍵,后來發(fā)現(xiàn)引入的包不對,必須引入 org.junit.jup

    2024年02月11日
    瀏覽(47)
  • 手搭手入門Mybatis-Plus配置多數(shù)據(jù)源

    手搭手入門Mybatis-Plus配置多數(shù)據(jù)源

    https://baomidou.com/ 為簡化開發(fā)而生 MyBatis-Plus(opens new window)(簡稱 MP)是一個 MyBatis (opens new window) 的增強工具,在 MyBatis 的基礎上只做增強不做改變,為簡化開發(fā)、提高效率而生。 無侵入 :只做增強不做改變,引入它不會對現(xiàn)有工程產(chǎn)生影響,如絲般順滑 損耗小 :啟動即會自

    2024年02月07日
    瀏覽(31)
  • SpringBoot整合Mybatis-Plus+Druid實現(xiàn)多數(shù)據(jù)源

    SpringBoot整合Mybatis-Plus+Druid實現(xiàn)多數(shù)據(jù)源

    ??本文主要講解 springboot +mybatisplus + druid 實現(xiàn)多數(shù)據(jù)源配置功能 ?? 主頁傳送門:?? 傳送 Spring Boot: ? ?Spring Boot是一個基于Spring框架的開源Java開發(fā)框架,旨在簡化Spring應用程序的開發(fā)、配置和部署。它提供了一種快速、敏捷的方式來構建獨立的、生產(chǎn)級別的Spring應用程

    2024年02月09日
    瀏覽(25)
  • SpringBoot整合Mybatis-Plus、Druid配置多數(shù)據(jù)源

    SpringBoot整合Mybatis-Plus、Druid配置多數(shù)據(jù)源

    目錄 1.初始化項目 1.1.初始化工程 1.2.添加依賴 1.3.配置yml文件 1.4.Spring Boot 啟動類中添加?@MapperScan?注解,掃描 Mapper 文件夾 1.5.配置使用數(shù)據(jù)源 1.5.1.注解方式 1.5.2.基于AOP手動實現(xiàn)多數(shù)據(jù)源原生的方式 2.結果展示 Mybatis-Plus:簡介 | MyBatis-Plus (baomidou.com) 在正式開始之前,先初始

    2024年02月11日
    瀏覽(24)
  • 【SpringBoot 3.x】整合Mybatis-Plus多數(shù)據(jù)源、Druid

    【SpringBoot 3.x】整合Mybatis-Plus多數(shù)據(jù)源、Druid

    開發(fā)依賴 版本 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日
    瀏覽(54)
  • SpringBoot+MyBatis-Plus多數(shù)據(jù)源@DS注解失效的解決方法

    引入 dynamic-datasource: application.yml 數(shù)據(jù)源配置: 詳細使用請看 MyBatis-Plus官網(wǎng) 這種場景還是比較常見,比如在一個為master數(shù)據(jù)源的調用slave數(shù)據(jù)源就會失效 slave數(shù)據(jù)源Service方法 mater數(shù)據(jù)源Service方法調用slave數(shù)據(jù)源Service方法 這里會出現(xiàn)沒有走slave_1,依然還是master數(shù)據(jù)源 需要在

    2024年01月18日
    瀏覽(28)
  • Springboot+mybatis-plus+dynamic-datasource+Druid 多數(shù)據(jù)源 分布式事務

    Springboot+mybatis-plus+dynamic-datasource+Druid 多數(shù)據(jù)源 分布式事務

    背景 處理多數(shù)據(jù)源事務一直是一個復雜而棘手的問題,通常我們有兩種主流的解決方法。 第一種是通過Atomikos手動創(chuàng)建多數(shù)據(jù)源事務,這種方法更適合數(shù)據(jù)源數(shù)量較少,參數(shù)配置不復雜,對性能要求不高的項目。然而,這種方法的最大困難在于需要手動配置大量設置,這可能

    2024年02月11日
    瀏覽(26)
  • mybatis(plus)多數(shù)據(jù)源

    ? ? ?一個項目大部分都是單一數(shù)據(jù)庫多一些,但是有時候會需要用多個庫,所以這時候據(jù)需要使用多數(shù)據(jù)源。我這里使用springboot+mybatis(plus)+druid多數(shù)據(jù)源. 目前我知道有兩種方式,一種方式是需要在service實現(xiàn)類上添加@DS,一種方式是通過配置的方式,配置不同的SqlSessionFac

    2024年02月06日
    瀏覽(26)
  • MyBatis Plus 插件 動態(tài)數(shù)據(jù)源實現(xiàn)原理與源碼講解 (dynamic-datasource-spring-boot-starter-master)

    MyBatis Plus 插件 動態(tài)數(shù)據(jù)源實現(xiàn)原理與源碼講解 (dynamic-datasource-spring-boot-starter-master)

    目錄 1. 介紹 2. 基本原理 3. 源碼介紹 3.1 使用 AOP 攔截,方法執(zhí)行前獲取到當前方法要用的數(shù)據(jù)源 3.2 實現(xiàn)自定義?DataSource 接口,實現(xiàn) DataSource 接口的 getConnect 方法做動態(tài)處理 多數(shù)據(jù)源即一個項目中同時存在多個不同的數(shù)據(jù)庫連接池。 比如 127.0.0.1:3306/test? ?127.0.0.1:3307/test?

    2024年02月07日
    瀏覽(28)
  • Spring Boot MyBatis Plus 配置數(shù)據(jù)源詳解

    Spring Boot MyBatis Plus 配置數(shù)據(jù)源詳解

    ??歡迎來到架構設計專欄~Spring Boot MyBatis Plus 配置數(shù)據(jù)源詳解 ☆* o(≧▽≦)o *☆嗨~我是IT·陳寒?? ?博客主頁:IT·陳寒的博客 ??該系列文章專欄:架構設計 ??其他專欄:Java學習路線 Java面試技巧 Java實戰(zhàn)項目 AIGC人工智能 數(shù)據(jù)結構學習 ??文章作者技術和水平有限,如果文

    2024年01月21日
    瀏覽(30)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包