最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

mybatis-flex實現(xiàn)多數(shù)據(jù)源操作

 更新時間:2024年06月24日 10:12:12   作者:kunkun2580  
MyBaits-Flex內置了功能完善的多數(shù)據(jù)源支持,本文主要介紹了mybatis-flex實現(xiàn)多數(shù)據(jù)源操作,具有一定的參考價值,感興趣的可以了解一下

多數(shù)據(jù)源?

MyBaits-Flex 內置了功能完善的多數(shù)據(jù)源支持^1.0.6,不需要借助第三方插件或者依賴,開箱即用, 支持包括 druid、hikaricp、dbcp2、beecp 在內的任何數(shù)據(jù)源,MyBatis-Flex 多數(shù)據(jù)源配置如下:

mybatis-flex:
  datasource:
    ds1:
      url: jdbc:mysql://127.0.0.1:3306/db
      username: root
      password: 123456
    ds2:
      url: jdbc:mysql://127.0.0.1:3306/db2
      username: root
      password: 123456

在以上配置中,ds1 和 ds2 是由用戶自定義的,我們可以理解為數(shù)據(jù)源的名稱,或者數(shù)據(jù)源的 key,這個在動態(tài)切換數(shù)據(jù)庫中非常有用。

在無 Spring 框架的場景下,代碼如下:

DataSource dataSource1 = new HikariDataSource();
dataSource1.setJdbcUrl(....)

DataSource dataSource2 = new HikariDataSource();
dataSource2.setJdbcUrl(....)

DataSource dataSource3 = new HikariDataSource();
dataSource3.setJdbcUrl(....)

MybatisFlexBootstrap.getInstance()
        .setDataSource("ds1", dataSource1)
        .addDataSource("ds2", dataSource2)
        .addDataSource("ds3", dataSource3)
        .start();

開始使用?

默認使用第一個配置的數(shù)據(jù)源:

List<Row> rows = Db.selectAll("tb_account");
System.out.println(rows);

通過編碼的方式,切換到數(shù)據(jù)源 ds2

try{
    DataSourceKey.use("ds2")
    List<Row> rows = Db.selectAll("tb_account");
    System.out.println(rows);
}finally{
    DataSourceKey.clear();
}

或者

List<Row> rows =  DataSourceKey.use("ds2"
    , () -> Db.selectAll("tb_account"));

數(shù)據(jù)源切換(設置)?

MyBatis-Flex 提供了 4 種方式來配置數(shù)據(jù)源:

  • 1、編碼,使用DataSourceKey.use 方法。
  • 2、@UseDataSource("dataSourceName") 在 Mapper 類上,添加注解,用于指定使用哪個數(shù)據(jù)源。
  • 3、@UseDataSource("dataSourceName") 在 Mapper 方法上,添加注解,用于指定使用哪個數(shù)據(jù)源。
  • 4、@Table(dataSource="dataSourceName") 在 Entity 類上添加注解,該 Entity 的增刪改查請求默認使用該數(shù)據(jù)源。

在 SpringBoot 項目上,@UseDataSource("dataSourceName") 也可用于在 Controller 或者 Service 上。若是 Spring 項目(非 SpringBoot), 用戶需要參考 MultiDataSourceAutoConfiguration 進行配置后才能使用。

DataSourceKey.use 示例:

try{
    DataSourceKey.use("ds2")
    List<Row> rows = Db.selectAll("tb_account");
    System.out.println(rows);
}finally{
    DataSourceKey.clear();
}

@UseDataSource("dataSourceName") 示例:

@UseDataSource("ds2")
interface AccountMapper extends BaseMapper{
    List<Account> myMethod();
}

或者

interface AccountMapper extends BaseMapper{

    @UseDataSource("ds2")
    List<Account> myMethod();
}

@Table(dataSource="dataSourceName") 示例:

@Table(value = "tb_account", dataSource = "ds2")
public class Account {

    @Id(keyType = KeyType.Auto)
    private Long id;

    private String userName;
}

數(shù)據(jù)源配置的優(yōu)先級

DataSourceKey.use() > @UseDataSource()在方法上 > @UseDataSource()在類上 >@Table(dataSource="...")

更多的 Spring Yaml 配置支持?

mybatis-flex:
  datasource:
    ds1:
      url: jdbc:mysql://127.0.0.1:3306/db
      username: root
      password: 123456
    ds2:
      url: jdbc:mysql://127.0.0.1:3306/db2
      username: root
      password: 123456

在以上配置中,ds1 和 ds2 并未指定使用哪個數(shù)據(jù)連接池,MyBatis-Flex 會 自動探測 當前項目依賴了哪個連接池。 目前支持了 druid、hikaricp、dbcp2、beecp 的自動探測,如果項目中使用的不是這 4 種類型只有,需要添加 type 配置,如下所示:

mybatis-flex:
  datasource:
    ds1:
      type: com.your.datasource.type1
      url: jdbc:mysql://127.0.0.1:3306/db
      username: root
      password: 123456
    ds2:
      type: com.your.datasource.type2
      url: jdbc:mysql://127.0.0.1:3306/db2
      username: root
      password: 123456

同時,項目若使用到了多個數(shù)據(jù)源類型,則也需要添加 type 來指定當前數(shù)據(jù)源的類型。

除了 type、url、usernamepassword 的配置以外,MyBatis-Flex 支持該 DataSource 類型的所有參數(shù)配置, 例如,在 DruidDataSource 類中存在 setAsyncInit 方法,我們就可以添加 asyncInit 的配置,如下所示:

mybatis-flex:
  datasource:
    ds1:
      type: druid
      url: jdbc:mysql://127.0.0.1:3306/db
      username: root
      password: 123456
      asyncInit: true
    ds2:
      type: com.your.datasource.type2
      url: jdbc:mysql://127.0.0.1:3306/db2
      username: root
      password: 123456

因此,只要該 DataSource 有 setter 方法,我們就可以在配置文件中進行配。與此相反的是:若該 DataSource 類型沒有該屬性,則不能使用這個配置。

提示

在數(shù)據(jù)源的配置中,type 可以配置為某個 DataSource 的類名,也可以配置為別名,別名支持有:druid、 hikari、hikaricpbee、beecp、dbcpdbcp2。

動態(tài)添加新的數(shù)據(jù)源?

在多租戶等某些場景下,我們可能需要用到動態(tài)的添加新的數(shù)據(jù)源,此時可以通過如下的方式進行添加。

FlexDataSource flexDataSource = FlexGlobalConfig.getDefaultConfig()
                                .getDataSource();

//新的數(shù)據(jù)源
HikariDataSource newDataSource = new HikariDataSource();

flexDataSource.addDataSource("newKey", newDataSource);

需要注意的是: 通過 FlexGlobalConfig 去獲取 FlexDataSource 時,需等待應用完全啟動成功后,才能正常獲取 FlexDataSource, 否則將會得到 null 值。

Spring 用戶可以通過 ApplicationListener 去監(jiān)聽 ContextRefreshedEvent 事件,然后再去添加新的數(shù)據(jù)源,如下代碼所示:

public class DataSourceInitListener implements ApplicationListener<ContextRefreshedEvent> {

    @Override
    public void onApplicationEvent(ContextRefreshedEvent event) {
        FlexDataSource dataSource = FlexGlobalConfig.getDefaultConfig()
                                    .getDataSource();

        dataSource.addDataSource("....", new DruidDataSource("..."));
    }

}

多數(shù)據(jù)源負載均衡 ^1.5.4?

數(shù)據(jù)源負載均衡指的是:在進行數(shù)據(jù)查詢的時候,隨機使用一個數(shù)據(jù)源。 這是的在高并發(fā)的場景下,起到負載的效果。

假設多數(shù)據(jù)源配置如下:

mybatis-flex:
  datasource:
    ds1:
      type: druid
      url: jdbc:mysql://127.0.0.1:3306/db
      username: root
      password: 123456
      asyncInit: true
    ds2:
      type: com.your.datasource.type2
      url: jdbc:mysql://127.0.0.1:3306/db2
      username: root
      password: 123456
    other:
      type: com.your.datasource.type2
      url: jdbc:mysql://127.0.0.1:3306/db2
      username: root
      password: 123456

以上配置了三個數(shù)據(jù)源,分別為:ds1ds2、other,假設我們想負載均衡使用 ds1、ds2 ,那么代碼如下:

try{
    DataSourceKey.use("ds*");
    List<Row> rows = Db.selectAll("tb_account");
    System.out.println(rows);
}finally{
    DataSourceKey.clear();
}

DataSourceKey.use("ds*") 中的 ds* 指的是使用 ds 開頭的任意一個數(shù)據(jù)源。ds* 必須以 "*" 結尾, 中間不能有空格,比如 "ds *" 中間有空格是不行的。

到此這篇關于mybatis-flex實現(xiàn)多數(shù)據(jù)源操作的文章就介紹到這了,更多相關mybatis-flex 多數(shù)據(jù)源操作內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • SpringBoot+Jersey跨域文件上傳的實現(xiàn)示例

    SpringBoot+Jersey跨域文件上傳的實現(xiàn)示例

    在SpringBoot開發(fā)后端服務時,我們一般是提供接口給前端使用,本文主要介紹了SpringBoot+Jersey跨域文件上傳的實現(xiàn)示例,具有一定的參考價值,感興趣的可以了解一下
    2024-07-07
  • Java this關鍵字的使用詳解

    Java this關鍵字的使用詳解

    this 關鍵字是 Java 常用的關鍵字,可用于任何實例方法內指向當前對象,也可指向對其調用當前方法的對象,或者在需要當前類型對象引用時使用
    2021-11-11
  • SpringBoot使用?Sleuth?進行分布式跟蹤的過程分析

    SpringBoot使用?Sleuth?進行分布式跟蹤的過程分析

    Spring Boot Sleuth是一個分布式跟蹤解決方案,它可以幫助您在分布式系統(tǒng)中跟蹤請求并分析性能問題,Spring Boot Sleuth是Spring Cloud的一部分,它提供了分布式跟蹤的功能,本文將介紹如何在Spring Boot應用程序中使用Sleuth進行分布式跟蹤,感興趣的朋友一起看看吧
    2023-10-10
  • SpringBoot整合MongoDB的步驟詳解

    SpringBoot整合MongoDB的步驟詳解

    這篇文章主要介紹了SpringBoot整合MongoDB的步驟詳解,幫助大家更好的理解和學習使用SpringBoot框架,感興趣的朋友可以了解下
    2021-04-04
  • Java檢測網(wǎng)絡是否正常通訊

    Java檢測網(wǎng)絡是否正常通訊

    在網(wǎng)絡應用程序中,檢測IP地址和端口是否通常是必要的,本文主要介紹了Java檢測網(wǎng)絡是否正常通訊,具有一定的參考價值,感興趣的可以了解一下
    2023-11-11
  • Java heap space OOM 精準定位與體系化排查方案詳解

    Java heap space OOM 精準定位與體系化排查方案詳解

    精準定位Java堆內存溢出(OOM)需要結合監(jiān)控、JVM參數(shù)、內存快照和可視化工具,本文介紹Java heap space OOM 精準定位與體系化排查方案,感興趣的朋友一起看看吧
    2026-04-04
  • Java中消息隊列任務的平滑關閉詳解

    Java中消息隊列任務的平滑關閉詳解

    對于消息隊列的監(jiān)聽,我們一般使用Java寫一個獨立的程序,在Linux服務器上運行。程序啟動后,通過消息隊列客戶端接收消息,放入一個線程池進行異步處理,并發(fā)的快速處理。這篇文章主要給大家介紹了關于Java中消息隊列任務的平滑關閉的相關資料,需要的朋友可以參考下。
    2017-11-11
  • Java中this關鍵字用法梳理詳細講解

    Java中this關鍵字用法梳理詳細講解

    this關鍵字是java常用的關鍵字,可用于任何實例方法內指向當前對象,也可指向對其調用當前方法的對象,下面這篇文章主要介紹了Java中this關鍵字用法梳理的相關資料,需要的朋友可以參考下
    2025-07-07
  • SpringBoot3集成SLF4J+logback進行日志記錄的實現(xiàn)

    SpringBoot3集成SLF4J+logback進行日志記錄的實現(xiàn)

    本文主要介紹了SpringBoot3集成SLF4J+logback進行日志記錄的實現(xiàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Spring中的注解之@Override和@Autowired

    Spring中的注解之@Override和@Autowired

    看別人寫的代碼,經(jīng)常會用到 @Override 和 @Autowired 這兩個注解.這邊總結一下這兩個注解的作用,對正在學習java的小伙伴們有很好地幫助,需要的朋友可以參考下
    2021-05-05

最新評論

丰台区| 文成县| 曲水县| 扬州市| 莫力| 马关县| 陆丰市| 龙州县| 巨野县| 伊春市| 蕲春县| 屯门区| 达拉特旗| 会泽县| 鄂尔多斯市| 兴文县| 喀喇| 遂昌县| 北宁市| 东乌珠穆沁旗| 海兴县| 元朗区| 梅河口市| 文化| 肥西县| 宝坻区| 子长县| 华坪县| 惠水县| 西充县| 莱西市| 三河市| 虞城县| 确山县| 商水县| 宽甸| 平舆县| 渭南市| 巫山县| 威信县| 大石桥市|