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

springboot+mybatis實現mysql和oracle多數據源

這篇具有很好參考價值的文章主要介紹了springboot+mybatis實現mysql和oracle多數據源。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1.aop+注解方式

在實際項目中很多時候會涉及到多個數據庫的訪問,或者數據庫讀寫分離的形式。

下面通過使用 Aspect+注解來實現mysql+oracle的多數據源配置(注意:事務一致性未提供)

首先要去oracle官網下載ojdbc的jar包,根據oracle的版本去下載,或者在下載的oracle的jdbc包下的lib里面有,然后導入項目中?。。?/strong>

動態(tài)數據源流程說明

Spring Boot 的動態(tài)數據源,本質上是把多個數據源存儲在一個 Map 中,當需要使用某個數據源時,從 Map 中獲取此數據源進行處理。而在 Spring 中,已提供了抽象類 AbstractRoutingDataSource 來實現此功能。因此,我們在實現動態(tài)數據源的,只需要繼承它,重寫determineCurrentLookupKey的方法即可

代碼如下:

1.數據庫連接信息配置
在application.yml中添加如下信息,根據自己項目的需要進行替換
spring:
  datasource:
    master:
      driver-class-name: com.mysql.cj.jdbc.Driver
      jdbc-url: jdbc:mysql://localhost:3306/數據庫名
      username: root
      password: root
    slave:
      type: com.alibaba.druid.pool.DruidDataSource
      platform: oracle
      jdbc-url: jdbc:oracle:thin:@localhost:1521:數據庫名
      username: system
      password: system
      #指定數據源的全限定名
      driver-class-name: oracle.jdbc.driver.OracleDriver

注意:根據springboot的版本不同,有不同的寫法,在springboot2.0的版本中,注意url要寫成jdbc-url,嘗試過url的話會報錯

2.數據源配置

根據連接信息,把數據源注入到 Spring 中,添加 DynamicDataSourceConfig 文件,配置如下

@Configuration
@EnableAutoConfiguration(exclude = { DataSourceAutoConfiguration.class })
public class DynamicDataSourceConfig {
    @Bean(DataSourceConstants.MASTER)
    @ConfigurationProperties(prefix = "spring.datasource.master")
    public DataSource masterDataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean(DataSourceConstants.SLAVE)
    @ConfigurationProperties(prefix = "spring.datasource.slave")
    public DataSource slaveDataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean
    @Primary
    public DataSource dynamicDataSource() {
        Map<Object, Object> dataSourceMap = new HashMap<>(2);
        dataSourceMap.put(DataSourceConstants.MASTER, masterDataSource());
        dataSourceMap.put(DataSourceConstants.SLAVE, slaveDataSource());
        //設置動態(tài)數據源
        DynamicDataSource dynamicDataSource = new DynamicDataSource();
        dynamicDataSource.setTargetDataSources(dataSourceMap);
        dynamicDataSource.setDefaultTargetDataSource(masterDataSource());
        return dynamicDataSource;
    }


}

需要在 DynamicDataSourceConfig 中,排除 DataSourceAutoConfiguration 的自動配置,否則 會出現The dependencies of some of the beans in the application context form a cycle的錯誤

使用注解 Primary 優(yōu)先從動態(tài)數據源中獲取

DataSourceConstants類:

public class DataSourceConstants {
    public final static String MASTER = "master";

    public final static String SLAVE = "slave";
}
3.動態(tài)數據源設置

添加動態(tài)數據源類

DynamicDataSourceDynamicDataSourceContextHolder

public class DynamicDataSource extends AbstractRoutingDataSource {
    @Override
    protected Object determineCurrentLookupKey() {
        return DynamicDataSourceContextHolder.getContextKey();
    }

}
public class DynamicDataSourceContextHolder {
   
    /*這是為了線程安全*/
    private static final ThreadLocal<String> DATASOURCE_CONTEXT_KEY_HOLDER = new ThreadLocal<>();

    /* 設置/切換數據源*/
    public static void setContextKey(String key) {
       
        DATASOURCE_CONTEXT_KEY_HOLDER.set(key);
    }

    /* 獲取數據源名稱 */
    public static String getContextKey() {
        String key = DATASOURCE_CONTEXT_KEY_HOLDER.get();
        return key == null ? DataSourceConstants.MASTER : key;
    }

    /*刪除當前數據源名稱*/
    public static void removeContextKey() {
        DATASOURCE_CONTEXT_KEY_HOLDER.remove();
    }

}
4.使用AOP選擇數據源
自定義一個annotation?DbAnnotation注解
@Target({ ElementType.METHOD, ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
public @interface DbAnnotation {
    /**
     * 數據源名稱,默認master
     */
    String value() default DataSourceConstants.MASTER;
}

定義數據源切面

@Aspect
@Component
public class DynamicDataSourceAspect {
    //攔截DbAnnotation
    @Pointcut("@within(com.example.constant.DbAnnotation)"+"||@annotation(com.example.constant.DbAnnotation)")
    public void dataSourcePointCut() {
    }

    @Around("dataSourcePointCut()")
    public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
        String dsKey = this.getDSAnnotation(joinPoint).value();
        DynamicDataSourceContextHolder.setContextKey(dsKey);
        try {
            return joinPoint.proceed();
        } catch (Exception ex) {
            throw ex;
        } finally {
            DynamicDataSourceContextHolder.removeContextKey();
        }
    }

    /**
     * 根據類或方法獲取數據源注解
     */
    private DbAnnotation getDSAnnotation(ProceedingJoinPoint joinPoint) {
        //mybatis生成的代理類,所以獲取它的接口來獲取DbAnnotation注解信息
        Class<?> targetClass = joinPoint.getTarget().getClass().getInterfaces()[0];
        DbAnnotation dsAnnotation = targetClass.getAnnotation(DbAnnotation.class);
        // 先判斷類的注解,再判斷方法注解
        if (Objects.nonNull(dsAnnotation)) {
            return dsAnnotation;
        } else {
            MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();
            DbAnnotation annotation = methodSignature.getMethod().getAnnotation(DbAnnotation.class);
            return annotation;
        }
    }
}

在mapper接口上添加@DbAnnotation注解,為slave數據源添加了個測試的mapper:

@Mapper
public interface OrUserMapper extends BaseMapper<OrUser> {
    @Select("select *from tb_user")
    @DbAnnotation(DataSourceConstants.SLAVE)
    List<OrUser> select();
}
@RequestMapping("/user/select")
public void test(){
    List<OrUser> select = orUserMapper.select();
    System.out.println(select.get(0));
}

然后如果想要在同一個函數里面調用不同的數據庫的話,此時不能將注解定義在函數上面,不然mybatis-plus會報錯,因為mybatis-plus 默認來說是運行期間就只支持一種數據源,初始化的時候就已經決定了,無法動態(tài)轉換。

所以我們可以在一個方法里面需要調用不同數據庫的地方的函數或者mapper接口那邊定義使用的數據源即可

比如在mysql的mapper上面加上注解:

@Mapper
//可以加或者不加也可以
@DbAnnotation(DataSourceConstants.MASTER)
public interface UserMapper extends BaseMapper<User> {
}

其實加和不加都可以,因為不加的話使用的是默認的數據源, 默認的就是mysql

在使用oracle數據庫的mapper里面

@Mapper
public interface OrUserMapper extends BaseMapper<OrUser> {
    @Select("select *from tb_user")
    @DbAnnotation(DataSourceConstants.SLAVE)
    List<OrUser> select();
}

測試:

public void select() {
    List<OrUser> select = orUserMapper.select();
    List<User> users = userMapper.selectList(null);
    System.out.println(select.get(0));
    System.out.println(users.get(0));
}

2.使用spring提供的一個依賴

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

配置文件:

spring:
  datasource:
    dynamic:
      primary: master # 配置默認數據庫
      datasource:
    #主庫數據源
         master:
           driver-class-name: com.mysql.cj.jdbc.Driver
           url: jdbc:mysql://127.0.0.1:3306/數據庫名
           username: root
           password: root
         slave:
           type: com.alibaba.druid.pool.DruidDataSource
           platform: oracle
           url: jdbc:oracle:thin:@localhost:1521:數據庫名
           username: system
           password: system
           #指定數據源的全限定名
           driver-class-name: oracle.jdbc.driver.OracleDriver

然后在需要切換的地方使用@DS注解即可

 @DS("slave")
    public void test(){
        List<OrUser> select = userMapper.select();
        System.out.println(select.get(0).getUsername());
    }

參考鏈接:springboot 配置多數據源(Aop+注解實現)_mj_940620的博客-CSDN博客文章來源地址http://www.zghlxwxcb.cn/news/detail-728627.html

到了這里,關于springboot+mybatis實現mysql和oracle多數據源的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

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

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

相關文章

  • SpringBoot結合MyBatis實現多數據源配置

    SpringBoot結合MyBatis實現多數據源配置

    SpringBoot框架實現多數據源操作,首先需要搭建Mybatis的運行環(huán)境。 由于是多數據源,也就是要有多個數據庫,所以,我們創(chuàng)建兩個測試數據庫,分別是:【sp-demo01】和【sp-demo02】,如下圖所示: 具體SQL代碼: 創(chuàng)建【sp-demo01】數據庫。 創(chuàng)建【sp-demo02】數據庫。 MyBatis框架中,

    2024年02月09日
    瀏覽(15)
  • 若依分離版——配置多數據源(mysql和oracle),實現一個方法操作多個數據源

    若依分離版——配置多數據源(mysql和oracle),實現一個方法操作多個數據源

    目錄 一、若依平臺配置 ? ? ? ? ??二、編寫oracle數據庫訪問的各類文件 ?三.? 一個方法操作多個數據源 一、若依平臺配置 1、在ruoyi-admin的pom.xml添加oracle依賴 2、引入ojdbc6.jar包 在ruoyi-admin的resource下創(chuàng)建lib文件夾,將ojdbc6.jar包保存在此目錄下 3.? 刷新maven 刷新maven保證ruo

    2024年02月05日
    瀏覽(72)
  • springBoot-Mybatis-Plus 多數據源切換實現

    springBoot-Mybatis-Plus 多數據源切換實現

    前言:本文主要通過AbstractRoutingDataSource,實現根據 http 訪問攜帶的標識動態(tài)切換數據源; 1 AbstractRoutingDataSource 介紹: AbstractRoutingDataSource 是 Spring 框架中的一個抽象類,它可以用來實現動態(tài)數據源切換。在多數據源場景下,AbstractRoutingDataSource 可以根據不同的請求來動態(tài)地選

    2024年02月03日
    瀏覽(23)
  • 【萬字長文】SpringBoot整合MyBatis搭建MySQL多數據源完整教程(提供Gitee源碼)

    前言:在我往期的博客介紹了2種關于如何使用SpringBoot搭建多數據源操作,本期博客我參考的是目前主流的框架,把最后一種整合多數據源的方式以博客的形式講解完,整合的過程比較傳統(tǒng)和復雜,不過我依舊會把每個實體類的思路都給大家講解清楚的,項目的最后我都會提

    2024年02月14日
    瀏覽(24)
  • SpringBoot 整合 Neo4j、MySQL 多數據源方案(Druid Mybatis DynamicDatasource)

    本文總結了Neo4j和Spring/SpringBoot、Alibaba Druid、Dynamic Datasource、Mybatis等整合方案,對相應配置做了詳細說明。 添加Neo4j JDBC Driver依賴 添加application.yml配置 添加Neo4j JDBC Driver + Alibaba Druid依賴 添加application.yml配置 添加Neo4j JDBC Driver、Alibaba Druid、Dynamic DataSource依賴 添加application.y

    2023年04月08日
    瀏覽(19)
  • SpringBoot整合Mybatis-Plus+Druid實現多數據源

    SpringBoot整合Mybatis-Plus+Druid實現多數據源

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

    2024年02月09日
    瀏覽(25)
  • Spring Boot + MyBatis-Plus 實現 MySQL 主從復制動態(tài)數據源切換

    Spring Boot + MyBatis-Plus 實現 MySQL 主從復制動態(tài)數據源切換

    MySQL 主從復制是一種常見的數據庫架構,它可以提高數據庫的性能和可用性。 動態(tài)數據源切換則可以根據業(yè)務需求,在不同場景下使用不同的數據源,比如在讀多寫少的場景下,可以通過切換到從庫來分擔主庫的壓力 。 在本文中,我們將介紹如何在 Spring Boot 中實現 MySQL 動

    2024年02月19日
    瀏覽(27)
  • SpringBoot整合mysql、postgres、sqlserver實現多數據源配置案例

    SpringBoot整合mysql、postgres、sqlserver實現多數據源配置案例

    ? ? ? ? 分享一下近期處理的一個小demo,關于配置多數據源實現不同服務之間的數據推送和數據治理。第一次接觸到pg庫和sqlserver一頭霧水,選擇了JDBC+mybatis-plus的方式去鏈接。 1、首先要引入以下依賴 2、demo的項目結構如下 3、yml配置文件 4、配置類 5、controller、dao、service以

    2024年02月06日
    瀏覽(28)
  • springboot+mybatis+pgsql多數據源配置

    springboot+mybatis+pgsql多數據源配置

    jdk環(huán)境:1.8 配置了雙數據源 pgsql+pgsql ? 第一個配置文件 :PrimaryDataSourceConfig 參數詳情 :@Primary //指定你主要的數據源是哪一個 例如:我這里主要數據源是第一個配置文件 所以我的第二個配置文件并沒有加這個注解 注意修改: @MapperScan里面的basePackages @ConfigurationProperties里面

    2024年02月03日
    瀏覽(19)
  • SpringBoot+mybatis+pgsql多個數據源配置

    SpringBoot+mybatis+pgsql多個數據源配置

    jdk環(huán)境:1.8 配置了雙數據源springboot+druid+pgsql,application.properties配置修改如下: 主數據庫注入 從數據庫Java代碼: ? ? ?這里就就不一一貼代碼了,主要是接口對應mybatis xml配置文件。項目文件接口如下: 創(chuàng)建成以上目錄就可以了,分別是dao接口、Java數據源配置、mybatis映射

    2024年02月11日
    瀏覽(27)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領取紅包

二維碼2

領紅包