欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

利用Sharding-Jdbc組件實(shí)現(xiàn)分表

 更新時(shí)間:2018年07月25日 16:55:26   作者:huangheng_01  
這篇文章主要為大家詳細(xì)介紹了利用Sharding-Jdbc組件實(shí)現(xiàn)分表,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

看到了當(dāng)當(dāng)開源的Sharding-JDBC組件,它可以在幾乎不修改代碼的情況下完成分庫(kù)分表的實(shí)現(xiàn)。摘抄其中一段介紹:

Sharding-JDBC直接封裝JDBC API,可以理解為增強(qiáng)版的JDBC驅(qū)動(dòng),舊代碼遷移成本幾乎為零:

  • 可適用于任何基于java的ORM框架,如:JPA, Hibernate, Mybatis, Spring JDBC Template或直接使用JDBC。
  • 可基于任何第三方的數(shù)據(jù)庫(kù)連接池,如:DBCP, C3P0, BoneCP, Druid等。
  • 理論上可支持任意實(shí)現(xiàn)JDBC規(guī)范的數(shù)據(jù)庫(kù)。雖然目前僅支持MySQL,但已有支持Oracle,SQLServer,DB2等數(shù)據(jù)庫(kù)的計(jì)劃。

先做一個(gè)最簡(jiǎn)單的試用,不做分庫(kù),僅做分表。選擇數(shù)據(jù)表bead_information,首先復(fù)制成三個(gè)表:bead_information_0、bead_information_1、bead_information_2

測(cè)試實(shí)現(xiàn)過程

前提:已經(jīng)實(shí)現(xiàn)srping+mybatis對(duì)單庫(kù)單表做增刪改查的項(xiàng)目。

1、修改pom.xml增加dependency

<dependency>
  <groupId>com.dangdang</groupId>
  <artifactId>sharding-jdbc-core</artifactId>
  <version>1.4.2</version>
 </dependency>
 <dependency>
  <groupId>com.dangdang</groupId>
  <artifactId>sharding-jdbc-config-spring</artifactId>
  <version>1.4.0</version>
</dependency> 

2、新建一個(gè)sharding-jdbc.xml文件,實(shí)現(xiàn)分庫(kù)分表的配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:context="http://www.springframework.org/schema/context" 
 xmlns:tx="http://www.springframework.org/schema/tx"
 xmlns:rdb="http://www.dangdang.com/schema/ddframe/rdb"
 xsi:schemaLocation="http://www.springframework.org/schema/beans
   http://www.springframework.org/schema/beans/spring-beans.xsd 
   http://www.springframework.org/schema/tx 
   http://www.springframework.org/schema/tx/spring-tx.xsd
   http://www.springframework.org/schema/context 
   http://www.springframework.org/schema/context/spring-context.xsd
   http://www.dangdang.com/schema/ddframe/rdb 
   http://www.dangdang.com/schema/ddframe/rdb/rdb.xsd">
 
 
 
 <!-- 配置數(shù)據(jù)源 -->
 <bean name="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
 <property name="url" value="jdbc:mysql://localhost:3306/beadhouse" />
 <property name="username" value="root" />
 <property name="password" value="123456" />
 </bean>
   
 <rdb:strategy id="tableShardingStrategy" sharding-columns="id" algorithm-class="com.springdemo.utill.MemberSingleKeyTableShardingAlgorithm"/>
 
 <rdb:data-source id="shardingDataSource">
 <rdb:sharding-rule data-sources="dataSource">
  <rdb:table-rules>
  <rdb:table-rule logic-table="bead_information" actual-tables="bead_information_${0..2}" table-strategy="tableShardingStrategy"/>
  </rdb:table-rules>
 </rdb:sharding-rule>
 </rdb:data-source>
 
 <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
 <property name="dataSource" ref="shardingDataSource" />
 </bean>
</beans>

3、將文件引入spring配置文件中。

需要修改幾個(gè)地方,把sqlSessionFactory和transactionManager原來關(guān)聯(lián)的dataSource統(tǒng)一修改為shardingDataSource(這一步作用就是把數(shù)據(jù)源全部托管給sharding去管理)

4、實(shí)現(xiàn)分表(分庫(kù))邏輯,我們的分表邏輯類需要實(shí)現(xiàn)SingleKeyTableShardingAlgorithm接口的三個(gè)方法doBetweenSharding、doEqualSharding、doInSharding

(取模除數(shù)需要按照自己需求改變,我這里分3個(gè)表,所以除以3)

import java.util.Collection;
import java.util.LinkedHashSet;
import com.dangdang.ddframe.rdb.sharding.api.ShardingValue;
import com.dangdang.ddframe.rdb.sharding.api.strategy.table.SingleKeyTableShardingAlgorithm;
import com.google.common.collect.Range;
public class MemberSingleKeyTableShardingAlgorithm implements SingleKeyTableShardingAlgorithm<Integer> {

 @Override
 public Collection<String> doBetweenSharding(Collection<String> tableNames, ShardingValue<Integer> shardingValue) {
 Collection<String> result = new LinkedHashSet<String>(tableNames.size());
 Range<Integer> range = (Range<Integer>) shardingValue.getValueRange();
 for (Integer i = range.lowerEndpoint(); i <= range.upperEndpoint(); i++) {
  Integer modValue = i % 3;
  String modStr = modValue < 3 ? "" + modValue : modValue.toString();
  for (String each : tableNames) {
  if (each.endsWith(modStr)) {
   result.add(each);
  }
  }
 }
 return result;
 }
 @Override
 public String doEqualSharding(Collection<String> tableNames, ShardingValue<Integer> shardingValue) {
 Integer modValue = shardingValue.getValue() % 3;
 String modStr = modValue < 3 ? "" + modValue : modValue.toString();
 for (String each : tableNames) {
  if (each.endsWith(modStr)) {
  return each;
  }
 }
 throw new IllegalArgumentException();
 }
 @Override
 public Collection<String> doInSharding(Collection<String> tableNames, ShardingValue<Integer> shardingValue) {
 Collection<String> result = new LinkedHashSet<String>(tableNames.size());
 for (Integer value : shardingValue.getValues()) {
  Integer modValue = value % 3;
  String modStr = modValue < 3 ? "" + modValue : modValue.toString();
  for (String tableName : tableNames) {
  if (tableName.endsWith(modStr)) {
   result.add(tableName);
  }
  }
 }
 return result;
 }
}

5、配置完成,可以實(shí)現(xiàn)增刪改查測(cè)試。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java導(dǎo)出Word文檔的實(shí)現(xiàn)方法詳解

    Java導(dǎo)出Word文檔的實(shí)現(xiàn)方法詳解

    這篇文章主要給大家介紹了關(guān)于Java導(dǎo)出Word文檔的實(shí)現(xiàn)方法,在日常的開發(fā)工作中,我們時(shí)常會(huì)遇到導(dǎo)出Word文檔報(bào)表的需求,比如公司的財(cái)務(wù)報(bào)表、醫(yī)院的患者統(tǒng)計(jì)報(bào)表、電商平臺(tái)的銷售報(bào)表等等,需要的朋友可以參考下
    2023-08-08
  • Java并發(fā)容器相關(guān)知識(shí)總結(jié)

    Java并發(fā)容器相關(guān)知識(shí)總結(jié)

    今天給大家?guī)淼奈恼率荍ava并發(fā)容器的相關(guān)知識(shí),文中有非常詳細(xì)的介紹,對(duì)正在學(xué)習(xí)Java并發(fā)容器的小伙伴們很有幫助,需要的朋友可以參考下
    2021-06-06
  • Java打亂ArrayList生成一個(gè)隨機(jī)序列列表

    Java打亂ArrayList生成一個(gè)隨機(jī)序列列表

    有時(shí)候會(huì)需要將一個(gè)ArrayList或者數(shù)組中的數(shù)字打亂,方便后續(xù)使用,比如隨機(jī)出題、答案選項(xiàng)打亂、連線題打亂、抽獎(jiǎng)號(hào)碼打亂等等,把我自己寫的一段代碼貼出來分享給大家。
    2016-08-08
  • 解決異常FileNotFoundException:class path resource找不到資源文件的問題

    解決異常FileNotFoundException:class path resource找不到資源文件的問題

    今天小編就為大家分享一篇關(guān)于解決異常FileNotFoundException:class path resource找不到資源文件的問題,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • Mybatis動(dòng)態(tài)元素if的使用方式

    Mybatis動(dòng)態(tài)元素if的使用方式

    這篇文章主要介紹了Mybatis動(dòng)態(tài)元素if的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Java遍歷輸出指定目錄、樹形結(jié)構(gòu)所有文件包括子目錄下的文件

    Java遍歷輸出指定目錄、樹形結(jié)構(gòu)所有文件包括子目錄下的文件

    這篇文章主要介紹了Java遍歷輸出指定目錄、樹形結(jié)構(gòu)下的所有文件包括子目錄中的文件,需要的朋友可以參考下
    2015-07-07
  • SpringBoot啟動(dòng)器Starters使用及原理解析

    SpringBoot啟動(dòng)器Starters使用及原理解析

    這篇文章主要介紹了SpringBoot啟動(dòng)器Starters使用及原理解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • Java中的信息摘要算法MessageDigest類用法詳解

    Java中的信息摘要算法MessageDigest類用法詳解

    這篇文章主要介紹了Java中的信息摘要算法MessageDigest類用法詳解,java.security.MessageDigest類為應(yīng)用程序提供信息摘要算法的功能,如MD5或SHA-1或SHA-256算法,信息摘要是安全的單向哈希函數(shù),它接收任意大小的數(shù)據(jù),并輸出固定長(zhǎng)度的哈希值,需要的朋友可以參考下
    2024-01-01
  • Java中關(guān)于內(nèi)存泄漏出現(xiàn)的原因匯總及如何避免內(nèi)存泄漏(超詳細(xì)版)

    Java中關(guān)于內(nèi)存泄漏出現(xiàn)的原因匯總及如何避免內(nèi)存泄漏(超詳細(xì)版)

    這篇文章主要介紹了Java中關(guān)于內(nèi)存泄漏出現(xiàn)的原因匯總及如何避免內(nèi)存泄漏(超詳細(xì)版)的相關(guān)資料,需要的朋友可以參考下
    2016-09-09
  • Java多線程中的CyclicBarrier詳解

    Java多線程中的CyclicBarrier詳解

    這篇文章主要介紹了Java多線程中的CyclicBarrier詳解,同步屏障,允許一組線程互相等待以到達(dá)一個(gè)公共的障礙點(diǎn),當(dāng)設(shè)定的線程數(shù)到達(dá)屏障時(shí),阻塞的線程繼續(xù)執(zhí)行,需要的朋友可以參考下
    2023-11-11

最新評(píng)論