色五月色开心色婷婷色丁香,五月婷婷丁香花综合网,婷婷丁香五月激情综合在线,五月婷婷六月丁香动漫,婷婷丁香五月激情综合在线,丁香花中文字幕在线观看,播五月色五月开心五月网,开心激情综合网,狠狠色丁香婷婷综合最新地址,丁香视频在线观看,狠狠做六月爱婷婷综合av,久久激情五月丁香伊人

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運營的一線實戰(zhàn)洞察。

Spring多數(shù)據(jù)源路由實戰(zhàn):三層可控切換與分庫分表落地

Spring多數(shù)據(jù)源路由實戰(zhàn):三層可控切換與分庫分表落地 簡介本資源是一份面向Java后端開發(fā)者與數(shù)據(jù)庫架構(gòu)初學(xué)者的分庫分表實戰(zhàn)教學(xué)包聚焦企業(yè)級大數(shù)據(jù)量場景下的數(shù)據(jù)庫水平擴展難題以Sharding-JDBC為核心框架實現(xiàn)多數(shù)據(jù)源動態(tài)切換與透明化分片。資源共73個文件涵蓋18個Java業(yè)務(wù)與配置類、21個編譯后class文件、18個XML配置與映射文件含MyBatis映射及Sharding規(guī)則定義以及SQL建表腳本、Maven項目配置pom.xml、Eclipse工程元數(shù)據(jù).project/.classpath等關(guān)鍵開發(fā)資產(chǎn)整體僅66KB輕量易導(dǎo)入。已有2068人學(xué)習(xí)下載適合快速搭建SSMDemo環(huán)境并理解分片路由、數(shù)據(jù)源初始化、YAML分片規(guī)則配置等核心實踐環(huán)節(jié)。讀者可直接復(fù)用項目結(jié)構(gòu)掌握從多數(shù)據(jù)源聲明、分庫分表策略配置到跨庫CRUD調(diào)用的完整鏈路尤其適用于SpringMyBatisSharding-JDBC技術(shù)棧的中小規(guī)模分片落地參考。1. 分庫分表多數(shù)據(jù)源的切換不是加個注解就完事而是讓每個DAO層調(diào)用都清楚自己該連哪張表、哪個庫你剛接手一個日增300萬訂單的電商后臺MySQL單表已超2800萬行慢查詢從“偶發(fā)”變成“每分鐘必報”DBA甩來一句“上分庫分表吧?!薄Y(jié)果你興沖沖引入ShardingSphere配置好邏輯表、分片鍵、分片算法一跑測試發(fā)現(xiàn)用戶中心查user_info正常但訂單服務(wù)里一個帶JOIN的報表SQL直接報錯“無法路由到具體數(shù)據(jù)源”更玄學(xué)的是同一個Service方法里前半段insert走的是ds0后半段update卻連到了ds1事務(wù)根本沒法提交。這不是配置沒生效而是分庫分表的本質(zhì)從來不是“自動拆分”而是“顯式聲明精準控制”。這個項目就是一套可落地、可調(diào)試、可驗證的多數(shù)據(jù)源切換實戰(zhàn)方案它不依賴黑匣子中間件的自動路由而是用Spring原生AbstractRoutingDataSource 自定義ThreadLocal上下文 顯式數(shù)據(jù)源標記把“哪個線程該用哪個庫”這件事從配置文件里拽出來寫進代碼里、打在日志里、壓測時能一眼看穿。適合正在被跨庫JOIN、讀寫分離、歷史庫歸檔、灰度發(fā)布數(shù)據(jù)隔離等問題卡住的后端開發(fā)者尤其適合那些已經(jīng)踩過ShardingSphere規(guī)則配置陷阱、想回歸可控性的團隊。2. 架構(gòu)設(shè)計與核心模塊拆解三層路由機制讓數(shù)據(jù)源選擇不再靠猜這個項目不是簡單封裝了一個DynamicDataSource而是構(gòu)建了上下文驅(qū)動 規(guī)則匹配 手動覆蓋的三級路由體系。它把“用哪個庫”這件事拆成三個可獨立驗證、可組合使用的環(huán)節(jié)最外層是業(yè)務(wù)語義標記比如TargetDataSource(write)中間層是分片鍵自動識別比如方法參數(shù)含userId且當前策略為user_id分片最內(nèi)層是線程級強制綁定比如開啟事務(wù)時鎖定主庫。三者優(yōu)先級從高到低沖突時以手動標記為準。這種設(shè)計避免了“全局默認庫”帶來的隱式耦合也繞開了中間件對SQL語法的強約束——你寫原生MyBatis XML它照樣能路由你用JdbcTemplate手寫復(fù)雜UNION它也能按需切庫。整個結(jié)構(gòu)輕量無額外jar依賴、透明所有路由決策可打日志、可測試Mock ThreadLocal即可覆蓋全部分支。2.1 核心路由引擎AbstractRoutingDataSource的深度定制Spring原生的AbstractRoutingDataSource只提供一個determineCurrentLookupKey()抽象方法返回String類型的key。但本項目在此基礎(chǔ)上做了三處關(guān)鍵增強key不再是簡單字符串而是自定義的DataSourceKey類包含type(READ/WRITE)、shardId(如shard_01)、sourceId(如ds_master_v2)三個維度determineCurrentLookupKey()內(nèi)部不直接返回key而是委托給RouterChain執(zhí)行鏈式判斷每次key生成后自動記錄到MDC中供日志追蹤如[ds_keyWRITE:shard_01:ds_master_v2]。public class DynamicRoutingDataSource extends AbstractRoutingDataSource { Override protected Object determineCurrentLookupKey() { // 1. 檢查線程局部變量是否已強制綁定 DataSourceKey forcedKey DataSourceContextHolder.getForcedKey(); if (forcedKey ! null) { log.debug(Route forced: {}, forcedKey); return forcedKey; } // 2. 嘗試從方法參數(shù)/注解提取分片上下文 DataSourceKey contextKey ContextRouter.routeByContext(); if (contextKey ! null) { log.debug(Route by context: {}, contextKey); return contextKey; } // 3. 回退到默認策略如讀寫分離下的READ DataSourceKey defaultKey DefaultRouter.routeByDefault(); log.debug(Route by default: {}, defaultKey); return defaultKey; } }提示DataSourceKey必須實現(xiàn)equals()和hashCode()否則Spring緩存的targetDataSource Map會失效——這是血淚經(jīng)驗曾因忘記重寫導(dǎo)致同一key反復(fù)創(chuàng)建新連接池DB連接數(shù)暴增。2.2 上下文管理器ThreadLocal MDC雙保險DataSourceContextHolder是整個路由的“開關(guān)中樞”。它不只存一個String而是維護三個ThreadLocal變量forcedKey: 用于Transactional或TargetDataSource注解觸發(fā)的強制綁定shardContext: 存儲當前請求的分片標識如userId12345 → shardIdshard_03routeTrace: 布爾值開啟后自動記錄每次路由決策路徑用于排查“為什么沒走預(yù)期庫”。public class DataSourceContextHolder { private static final ThreadLocalDataSourceKey FORCED_KEY_HOLDER new NamedThreadLocal(forcedDataSourceKey); private static final ThreadLocalShardContext SHARD_CONTEXT_HOLDER new NamedThreadLocal(shardContext); private static final ThreadLocalBoolean ROUTE_TRACE_HOLDER ThreadLocal.withInitial(() - false); public static void setForcedKey(DataSourceKey key) { FORCED_KEY_HOLDER.set(key); // 同步寫入MDC確保日志可追溯 MDC.put(ds_key, key.toString()); } public static void setShardContext(ShardContext context) { SHARD_CONTEXT_HOLDER.set(context); MDC.put(shard_id, context.getShardId()); MDC.put(shard_key, context.getShardKey()); } public static void enableRouteTrace() { ROUTE_TRACE_HOLDER.set(true); MDC.put(route_trace, enabled); } }NamedThreadLocal是自定義類繼承ThreadLocal并重寫toString()方便在Arthas或jstack線程dump中快速識別該ThreadLocal用途——這點在生產(chǎn)環(huán)境排查“某個線程死鎖在數(shù)據(jù)庫連接上”時極其關(guān)鍵。2.3 分片上下文注入從Controller到Mapper的全鏈路透傳分片鍵如userId、orderId通常來自HTTP請求參數(shù)或RPC上下文不能靠DAO層自己猜。本項目采用“入口攔截顯式傳遞”模式Web層ShardParam(userId)注解標注Controller方法參數(shù)由ShardArgumentResolver解析并注入ShardContextRPC層Dubbo Filter或gRPC Interceptor從Attachment或Metadata中提取分片信息內(nèi)部調(diào)用Service方法簽名強制要求傳入ShardContext杜絕“隱式上下文”。RestController public class OrderController { GetMapping(/order/{orderId}) public OrderVO getOrder( PathVariable Long orderId, ShardParam(userId) Long userId) { // ← 此注解觸發(fā)ShardContext注入 return orderService.getOrder(orderId, userId); } } Service public class OrderServiceImpl implements OrderService { Override public OrderVO getOrder(Long orderId, Long userId) { // 1. 主動構(gòu)造ShardContext確保下游能路由 ShardContext context ShardContext.builder() .shardKey(userId) .shardValue(userId) .shardId(ShardAlgorithm.calculateShardId(userId)) // 如 userId % 4 → shard_02 .build(); DataSourceContextHolder.setShardContext(context); // 2. 執(zhí)行實際查詢此時DynamicRoutingDataSource已能獲取shardId return orderMapper.selectById(orderId); } }注意ShardAlgorithm.calculateShardId()必須是純函數(shù)無狀態(tài)、無外部依賴否則在多線程下可能產(chǎn)生不一致分片結(jié)果——這是分庫分表最隱蔽的翻車點之一。3. 數(shù)據(jù)源配置與初始化YAML驅(qū)動 運行時熱加載支持項目摒棄了XML硬編碼數(shù)據(jù)源的方式采用Spring Boot原生ConfigurationProperties綁定YAML配置同時預(yù)留了運行時刷新接口如POST /actuator/datasource/refresh無需重啟即可更新數(shù)據(jù)源連接池參數(shù)。配置結(jié)構(gòu)清晰分層頂層定義邏輯組如master-slave-group中層定義物理實例如ds_master_v2底層定義JDBC屬性。這種結(jié)構(gòu)天然支持灰度發(fā)布場景——你可以先將新庫ds_master_v3加入配置但不啟用待壓測通過后再修改group.default-write-source: ds_master_v3。3.1 application.yml核心配置片段# 多數(shù)據(jù)源基礎(chǔ)配置 spring: datasource: dynamic: primary: master # 默認寫庫 strict: false # 非嚴格模式未匹配到數(shù)據(jù)源時回退到primary datasource: # 主庫寫 master: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://db-master:3306/order_db_v2?useSSLfalseserverTimezoneAsia/Shanghai username: app_rw password: ${DB_MASTER_PWD} hikari: maximum-pool-size: 20 minimum-idle: 5 # 從庫集群讀 slave-01: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://db-slave-01:3306/order_db_v2?useSSLfalseserverTimezoneAsia/Shanghai username: app_ro password: ${DB_SLAVE_PWD} hikari: maximum-pool-size: 15 slave-02: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://db-slave-02:3306/order_db_v2?useSSLfalseserverTimezoneAsia/Shanghai username: app_ro password: ${DB_SLAVE_PWD} hikari: maximum-pool-size: 15 # 分片庫歷史訂單 shard-01: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://db-shard-01:3306/order_history_shard_01?useSSLfalseserverTimezoneAsia/Shanghai username: app_hist password: ${DB_HIST_PWD} shard-02: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://db-shard-02:3306/order_history_shard_02?useSSLfalseserverTimezoneAsia/Shanghai username: app_hist password: ${DB_HIST_PWD}3.2 動態(tài)數(shù)據(jù)源工廠支持運行時新增/刪除數(shù)據(jù)源DynamicDataSourceFactory負責(zé)將YAML配置轉(zhuǎn)化為MapObject, DataSource并注冊到DynamicRoutingDataSource中。關(guān)鍵點在于使用ConcurrentHashMap存儲targetDataSources保證put/remove線程安全每次refresh時先關(guān)閉舊數(shù)據(jù)源調(diào)用HikariDataSource.close()再注入新實例提供getDataSource(String key)方法供其他組件如Druid監(jiān)控按需獲取特定數(shù)據(jù)源。Component public class DynamicDataSourceFactory { private final MapObject, DataSource targetDataSources new ConcurrentHashMap(); PostConstruct public void init() { loadFromConfig(); // 從YAML加載初始數(shù)據(jù)源 } public void refresh(MapString, DataSourceProperties newConfigs) { // 1. 關(guān)閉所有舊數(shù)據(jù)源 targetDataSources.values().forEach(this::closeDataSource); targetDataSources.clear(); // 2. 創(chuàng)建新數(shù)據(jù)源并注入 newConfigs.forEach((key, props) - { HikariDataSource ds createHikariDataSource(props); targetDataSources.put(key, ds); }); // 3. 通知DynamicRoutingDataSource更新 dynamicRoutingDataSource.afterPropertiesSet(); } private void closeDataSource(DataSource ds) { if (ds instanceof HikariDataSource) { ((HikariDataSource) ds).close(); } } }注意dynamicRoutingDataSource.afterPropertiesSet()必須顯式調(diào)用否則Spring不會重新初始化resolvedDataSources緩存——這是熱加載失敗最常見的原因。3.3 分片策略配置YAML定義規(guī)則Java實現(xiàn)算法分片邏輯不寫死在代碼里而是通過YAML聲明規(guī)則再由Java類按需加載。例如shard: rules: - table: order_info key: user_id algorithm: mod4 sources: [shard-01, shard-02, shard-03, shard-04] - table: order_detail key: order_id algorithm: hash16 sources: [shard-01, shard-02, shard-03, shard-04]對應(yīng)Java端ShardRuleLoader解析YAML后生成ShardRule對象存入內(nèi)存并由ShardAlgorithmFactory根據(jù)algorithm字段返回具體實現(xiàn)public interface ShardAlgorithm { String calculateShardId(Object shardValue); } Component public class Mod4ShardAlgorithm implements ShardAlgorithm { Override public String calculateShardId(Object shardValue) { if (!(shardValue instanceof Number)) { throw new IllegalArgumentException(Mod4 requires numeric shard value); } long value ((Number) shardValue).longValue(); int shardIndex (int) (Math.abs(value) % 4); // 避免負數(shù)取模問題 return shard- String.format(%02d, shardIndex 1); // shard-01 ~ shard-04 } }這種解耦讓DBA可獨立修改分片規(guī)則改YAML而開發(fā)只需維護算法實現(xiàn)雙方無需協(xié)同發(fā)布。4. 避坑指南5個真實踩過的坑省下你三天排查時間分庫分表不是配置完就能跑通的銀彈而是處處埋雷的精細活。以下是我在某高校實驗室模擬項目X中連續(xù)兩周壓測時踩出的5個典型問題每一條都附帶復(fù)現(xiàn)條件、根因分析和可立即驗證的修復(fù)方案。4.1 現(xiàn)象事務(wù)內(nèi)跨庫操作不報錯但部分SQL實際執(zhí)行在錯誤庫上原因Transactional默認傳播行為是REQUIRED當方法A調(diào)用方法B時若B未聲明事務(wù)其數(shù)據(jù)源路由會脫離A的事務(wù)上下文導(dǎo)致B的SQL走默認庫而非事務(wù)綁定庫。解決在Transactional方法內(nèi)所有子調(diào)用必須顯式聲明Transactional(propagation Propagation.REQUIRED)或統(tǒng)一使用TransactionTemplate手動控制。更徹底的方案是在DataSourceInterceptor中檢測當前是否在事務(wù)中若在則強制將forcedKey設(shè)為事務(wù)起始時的key。4.2 現(xiàn)象MyBatis二級緩存命中但返回的數(shù)據(jù)卻是舊庫里的臟數(shù)據(jù)原因MyBatis的CachingExecutor在查詢前會先查緩存而緩存key未包含數(shù)據(jù)源標識如ds_key導(dǎo)致從shard-01查到的數(shù)據(jù)被緩存后續(xù)請求即使路由到shard-02也會命中該緩存。解決自定義CacheKey在org.apache.ibatis.cache.CacheKey.update()中加入DataSourceContextHolder.getForcedKey()的哈希值?;蛘摺扑]的做法——禁用跨庫場景的二級緩存在Mapper XML中添加cache evictionFIFO flushInterval60000 size1000 readOnlytrue blockingfalse/并設(shè)置useCachefalse。4.3 現(xiàn)象Druid監(jiān)控頁面顯示連接池活躍數(shù)為0但應(yīng)用日志瘋狂打印“getConnection timeout”原因DynamicRoutingDataSource的determineCurrentLookupKey()方法拋出異常如NullPointerException導(dǎo)致Spring fallback到defaultTargetDataSource而該項目未配置defaultTargetDataSource最終返回nullDruid拿到null后靜默失敗。解決在DynamicRoutingDataSource構(gòu)造時強制設(shè)置setDefaultTargetDataSource(defaultDs)并在determineCurrentLookupKey()最外層加try-catch捕獲所有異常并返回默認key同時記錄ERROR日志“Failed to determine data source key, fallback to default”。4.4 現(xiàn)象單元測試中Test方法能正確路由但集成測試SpringBootTest總是走默認庫原因Spring Boot Test默認使用Mockito代理而DataSourceContextHolder的ThreadLocal在線程切換如Async、CompletableFuture時未做透傳導(dǎo)致異步線程丟失上下文。解決在測試配置中注入TaskExecutorBean并重寫execute()方法在提交任務(wù)前拷貝ThreadLocalBean public TaskExecutor taskExecutor() { ThreadPoolTaskExecutor executor new ThreadPoolTaskExecutor(); executor.setCorePoolSize(5); executor.setBeanName(testTaskExecutor); executor.setTaskDecorator(runnable - () - { // 拷貝主線程的DataSource上下文 DataSourceKey key DataSourceContextHolder.getForcedKey(); if (key ! null) { DataSourceContextHolder.setForcedKey(key); } try { runnable.run(); } finally { DataSourceContextHolder.reset(); } }); return executor; }4.5 現(xiàn)象分庫后SELECT COUNT(*) FROM order_info返回結(jié)果比單庫少一半原因該SQL未帶WHERE條件ShardAlgorithm無法提取分片鍵路由引擎按默認策略如READ隨機選一個庫執(zhí)行而非廣播到所有分片庫。解決對這類全量聚合SQL必須顯式使用TargetDataSource(broadcast)注解并在BroadcastRouter中實現(xiàn)遍歷所有匹配分片庫分別執(zhí)行SQL再合并結(jié)果集。注意COUNT(*)需用SUM()聚合GROUP BY需用UNION ALL去重。5. 運行與驗證從啟動到壓測五步確認路由完全受控光跑通不算成功必須驗證每條SQL都落在預(yù)期庫上。本項目提供了一套開箱即用的驗證流水線不依賴外部工具全部基于Spring Boot Actuator和自研Endpoint實現(xiàn)。5.1 啟動檢查確認數(shù)據(jù)源已正確加載啟動應(yīng)用后訪問GET /actuator/datasource/info返回應(yīng)包含所有配置的數(shù)據(jù)源及其狀態(tài){ status: UP, details: { master: {status:UP,active:0,idle:5}, slave-01: {status:UP,active:0,idle:3}, shard-01: {status:UP,active:0,idle:2}, shard-02: {status:UP,active:0,idle:2} } }若某個數(shù)據(jù)源狀態(tài)為DOWN檢查日志中是否有HikariPool-1 - Failed to validate connection常見原因是密碼錯誤或網(wǎng)絡(luò)不通。5.2 路由追蹤開啟MDC日志實時觀察key生成過程在logback-spring.xml中配置pattern確保輸出%X{ds_key}和%X{shard_id}appender nameCONSOLE classch.qos.logback.core.ConsoleAppender encoder pattern%d{HH:mm:ss.SSS} [%thread] %-5level [%X{ds_key}|%X{shard_id}] %logger{36} - %msg%n/pattern /encoder /appender發(fā)起一次請求日志應(yīng)類似14:22:05.123 [http-nio-8080-exec-1] DEBUG [WRITE:shard_03:ds_master_v2|shard_03] c.e.o.s.OrderServiceImpl - getOrder called with orderId1001, userId12345 14:22:05.125 [http-nio-8080-exec-1] DEBUG [WRITE:shard_03:ds_master_v2|shard_03] c.e.o.m.OrderMapper.selectById - Preparing: SELECT * FROM order_info WHERE id ?若ds_key為空或與預(yù)期不符說明DataSourceContextHolder.setForcedKey()未被調(diào)用。5.3 SQL攔截驗證確認MyBatis執(zhí)行的確實是目標庫啟用MyBatis日志logging.level.org.apache.ibatisDEBUG觀察JDBC Connection日志Creating a new SqlSession SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession7a8b9c0d] was not registered for synchronization because synchronization is not active JDBC Connection [HikariProxyConnection123456789 wrapping com.mysql.cj.jdbc.ConnectionImpl987654321] will not be managed by Spring Preparing: SELECT * FROM order_info WHERE id ?關(guān)鍵看wrapping com.mysql.cj.jdbc.ConnectionImplxxxxx后的hashcode對比/actuator/datasource/pools返回的各數(shù)據(jù)源連接池中活躍連接的hashcode——必須一致才證明路由正確。5.4 壓測驗證用JMeter模擬混合流量觀測分片傾斜度編寫JMeter腳本按比例發(fā)送請求70%請求userId在1~100000區(qū)間應(yīng)均勻分布到4個shard20%請求userId固定為12345應(yīng)100%落到shard_0310%請求無userId參數(shù)應(yīng)走默認master庫。壓測10分鐘后執(zhí)行-- 查看各分片庫的order_info表行數(shù) SELECT COUNT(*) FROM order_info; -- 在shard-01庫執(zhí)行 SELECT COUNT(*) FROM order_info; -- 在shard-02庫執(zhí)行 ...理想結(jié)果shard-01 ~ shard-04行數(shù)比值接近70%:70%:70%:70%而非出現(xiàn)shard-01: 10w, shard-02: 500的嚴重傾斜。5.5 故障注入測試模擬單庫宕機驗證降級能力手動停掉shard-02數(shù)據(jù)庫容器然后發(fā)送原本應(yīng)路由到shard-02的請求如userId20001。預(yù)期行為若配置spring.datasource.dynamic.strictfalse應(yīng)自動fallback到primary庫master并記錄WARN日志“Shard shard-02 unavailable, fallback to primary”若配置stricttrue應(yīng)拋出DataSourceUnavailableException由上層業(yè)務(wù)捕獲并返回友好提示。此測試驗證了系統(tǒng)在部分分片不可用時的容錯能力而非直接雪崩。6. 二次開發(fā)與擴展如何安全地接入新業(yè)務(wù)、新分片規(guī)則、新數(shù)據(jù)源類型這個項目的設(shè)計初衷就是“可演進”而不是一次性交付。我把它用在模擬項目X的三個迭代周期中每次新增需求都只改3個類以內(nèi)從未動過核心路由引擎。以下是我沉淀下來的四條改造鐵律以及對應(yīng)的具體操作模板。6.1 接入新業(yè)務(wù)表三步完成分片配置假設(shè)要為新表user_behavior_log添加分庫分表分片鍵為user_id按mod8分到8個歷史庫Step 1擴展YAML配置在application-prod.yml中追加shard: rules: - table: user_behavior_log key: user_id algorithm: mod8 sources: [shard-log-01, shard-log-02, ..., shard-log-08] spring: datasource: dynamic: datasource: shard-log-01: url: jdbc:mysql://db-log-01:3306/log_db_01?... # ... 共8個數(shù)據(jù)源定義Step 2實現(xiàn)新分片算法Component public class Mod8ShardAlgorithm implements ShardAlgorithm { Override public String calculateShardId(Object shardValue) { long value Math.abs(((Number) shardValue).longValue()); int index (int) (value % 8); return shard-log- String.format(%02d, index 1); } }Step 3在Mapper接口上聲明分片意圖Mapper public interface UserBehaviorLogMapper { Insert(INSERT INTO user_behavior_log (...) VALUES (...)) TargetDataSource(shard-log) // ← 告訴路由引擎此Mapper只走shard-log系列庫 void insert(UserBehaviorLog record); }注意TargetDataSource(shard-log)中的值必須與YAML中sources列表的前綴一致路由引擎會自動匹配shard-log-01等具體實例。6.2 支持新數(shù)據(jù)源類型無縫接入PostgreSQL分片庫項目當前只支持MySQL但某模塊需對接PostgreSQL歷史庫。無需修改DynamicRoutingDataSource只需新增PostgreSqlDataSourceFactory繼承AbstractDataSourceFactory重寫createDataSource()方法在DynamicDataSourceFactory.refresh()中根據(jù)driver-class-name自動選擇工廠類PostgreSQL分片算法與MySQL完全復(fù)用Mod8ShardAlgorithm不依賴數(shù)據(jù)庫特性。public class PostgreSqlDataSourceFactory extends AbstractDataSourceFactory { Override protected DataSource createDataSource(DataSourceProperties props) { HikariConfig config new HikariConfig(); config.setJdbcUrl(props.getUrl()); config.setUsername(props.getUsername()); config.setPassword(props.getPassword()); config.setDriverClassName(org.postgresql.Driver); // PostgreSQL特有參數(shù) config.addDataSourceProperty(reWriteBatchedInserts, true); return new HikariDataSource(config); } }6.3 審計增強記錄每次路由決策的完整證據(jù)鏈生產(chǎn)環(huán)境需要審計“某次訂單查詢?yōu)楹巫吡藄hard-03”項目預(yù)留了RouteTrace擴展點。啟用方式// 在Controller中 GetMapping(/order/{id}) public OrderVO getOrder(PathVariable Long id) { DataSourceContextHolder.enableRouteTrace(); // ← 開啟追蹤 return orderService.getOrder(id); }啟用后日志自動追加route_path字段[ds_keyREAD:shard_03:slave-01|shard_idshard_03|route_pathANNOTATION→CONTEXT→DEFAULT]其中ANNOTATION→CONTEXT→DEFAULT表示先檢查了TargetDataSource注解未找到再嘗試從參數(shù)提取shardContext成功最后未觸發(fā)默認策略。6.4 灰度發(fā)布支持按用戶ID范圍動態(tài)切流上線新分片庫shard-05時希望先讓userId在1000000~1000010之間的用戶走新庫其余走老庫。只需擴展ShardAlgorithmComponent public class GrayShardAlgorithm implements ShardAlgorithm { Override public String calculateShardId(Object shardValue) { long userId ((Number) shardValue).longValue(); if (userId 1_000_000 userId 1_000_010) { return shard-05; // 灰度庫 } // 兜底走原有mod4算法 return new Mod4ShardAlgorithm().calculateShardId(shardValue); } }然后在YAML中將user_id表的algorithm改為gray即可?;叶冉Y(jié)束后刪掉這段if邏輯全程無需改SQL、不發(fā)版。從那以后我每次接入新業(yè)務(wù)表都強制走一遍這四步模板配YAML → 寫算法 → 打注解 → 壓測驗證。哪怕凌晨三點上線只要日志里看到[ds_keyWRITE:shard_05:ds_master_v3]心里就踏實。希望幫到你。本文還有配套的精品資源點擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
无码人妻精品一区二区三区99不卡| 国产一区麻豆免费观看| 嗯嗯啊啊啊好爽| 91美女色视频亚洲| 97资源超碰| 欧美国产精品| 玖玖爱在线视频免费观看| 天欧美在线| av婷婷色网| 男人的天堂一区三区| 97视频在线观看播放与子乱对白在线……| 99热只有这里有精品| 最新岛国大片| 久久久麻豆精品| 日本久操视频| 18精品一区| 欧美九9 9 9| 国产无马视频| 九月丁香婷婷色| 国产一国产一级毛片古装| 亚洲交换| 天美传媒精品一区二区三区| 超碰久超碰久| 九九九九九精品| 亚洲男人天堂2| 欧洲乱码一区二区| 免费看污网站| 性爱欧美五月| 欧美在线视频播放| 精品人妻无码一区二区三区不卡-精品人妻无码一区二区...|精品少妇一区二区三 | 国产理论视频在线播放| 全免费a敌肛交毛片免费| 黄在线| 97欧美| 日韩97P| 久9精品| 老司机福利社视频在线观看| 欧美狠狠狠| 哈哈操 大香蕉| 色婷婷狠狠18禁| 无码精品一区二区三区潘金莲| 色操逼网| 一级片在线观看高清无码| 日本免费一级AAA大片器| 日韩免费三级黄片电影| 操人人| 在线有码中文字幕| 家庭乱伦网站国产| 亚洲第一页色| 日本不卡码黄色| 国产AV天美| 色呦呦、国产精品| ai欧美亚洲小说| 婷婷五月天无码 | 人妻无码一区二区三区久久99| 污污污8888| 自拍第一页| 超碰97综合网| 国产AV无码AV| 男人的天堂2010| 日韩另类色图| 另类 综合 日韩 欧美 亚洲| 国内成人圈中文字幕无码视频 | 日日碰狠狠添天天爽超| 国产剧情在线| 婷婷av在线中文字幕| 日本成人A片网站| 国产麻豆福利av在线播放| 亚洲精品久久久久久久蜜桃臀| 中文字幕在线高清男人的天堂| 日本精品一区二区中文字幕| 99999精品视频| 嗯嗯啊好大| 青青草中出视频| 97视频免费| 五月天久久综合网| 依人大香蕉| wwe 天天干.com| 超碰97极品9| 日韩av无码网站| 亚洲中文国际强奸字幕| 五月黑AⅤ| 欧美 日韩 另类 亚洲| 色欧美色交综合| 国产精品福利资源在线尤物| 欧美熟妇视频 | 福利社区午夜一区二区| 九九视品黄色| 一区二区三区一亚洲中文字幕、综合区灬 | 韩国手机不卡无码三级视频| 久久精品国产亚洲AV先锋| 日韩欧美中文| 中文字幕乱偷人妻久久艾草网| 国产精品诱惑| 97任你吞精| 国产天美传媒精品| 97超碰人人模人人拍人人| 操逼逼福利视频| 丝袜喷水在线| 91啦人妻| 亚洲av热热色| 久久久97| 啪啪91| 人妻激情视频| 国产小u女在线观看| 欧亚乱色熟一区二区三四区| 91啪啪| 婷婷操逼| 久久久久女教师免费一区| 亚洲第一精品在线视频| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 暴力av在线| 国产人伦a片信息免费片| 天美传媒一二三区永久网站| 好吊色青靑草| 啊啊啊啊好多水| 久久鲁干| 人妻另类| 一区二区 韩日AV| 97超碰国产亚洲精品| 天天弄天天操| 女上位精品在线| 色青青久久影视| 99热 按摩 日韩| 天天摸夜夜添无码小视频| 久草视频制服诱惑| 九九干| 2019亚洲男人天堂| 婷婷午夜| 久久精品一区二区一8| 婷色五月| 极品销魂美女一区二区| 天美精品一区二区三区四区在线观看| 欧美18 在线观看| 97操97色| 一级人妻性爱视频| 国产亚洲日本| 九九RE视频在线精品| 中国91AV| 岛国小电影| 偷拍偷窥与盗摄视频专区| 嗯嗯啊啊用力视频免费| 天天躁日日躁XXXXYY| 91精品大奶人妻| 国产麻豆91欧美一区二区久久婷婷国产精品 | 操逼片中文| 久草老司机| 极品尤物在线观看| 亚洲色综合| 啊啊啊97视频| 亚洲色综合| 一级性爱视频免费观看 | 天天草天天日| 久操影视| 国产成人AV麻豆| 天天做日日做天天欢。| 天美麻豆黄色录像| 91社操逼| 99无码| 日日噜噜夜夜狠狠视频无| 国产熟女无套内射| 久偷拍| 中文字幕91页| 欧美亚洲国产91在线| 亚洲综合69| 九九热精品免费视频| 特级特黄一级毛片免费| 免费看欧美美女黄色大片| 夜夜春夜夜操| 久久久久亚洲精品| 午夜精品久久久久久久男人的天堂 | 91伊人久| 国产97色在线| 亚洲性高潮| 天天干天天日天天射黄色片| 婷婷丁香成人| 密乳无码| 啪一啪免费视频| 精品人妻一区二区免费蜜桃视频| 99re在线精品78| 久热伊人99re| 色色色色网站| 丰满少妇乱子伦精品无| 中国zzijzzijzzwww精品| 日夜精品| 亚洲狠狠入| 最新av在线| 久久婷婷色综合一区二区三区| 亚洲国产一级精品毛一级精品看免费视频 | 久久久久女教师免费一区 | 四方色播| A 天堂| 男女啊啊啊啊啊| 91强奸乱轮| 成人无遮挡毛片免费看| 17c嫩草51久久91嫩草| 日本久久久久久久久久| 国产97在线播放| 97超碰精品成| 9999久久久久| 久久久成人精品| 日本黄色裸日本黄色裸体| 96久久科窝| 又大又长又爽| 欧美暴力猛交| 噜噜噜久久亚洲精品色情| 青青草在线视频人人想人人上| 大香蕉啪啪啪| 六月婷婷五月丁香| 免费视频无码| 午夜欧美神马久久久久| 九月AV| 看黑人AV不卡| 日韩三级在线观看mp4| 午夜天堂精品久久| 久久大线蕉一区| 亚洲棕合电彰| 蜜区区视频79 | 国产精品原创巨作?v网站| 国内亚洲高清无码| 脫衣舞一区二区三区| 国产精品亚洲天堂网址| 精品无码不卡视频| 大香蕉九九| 五月开心网| 日日狠狠久久偷偷色综合免费| 水滴偷拍| 乱伦熟妇一区二区| 岛国大片在线观看网站入口| 涩五月婷婷| 丁香五月AV| 精品人妻1237| 91丝袜在线视频| 黑人综合色| 怡红院成人视频| 97色网| 美女视频尤物网在线看| 精品亚洲国产成人AV制服丝袜| 911粉嫩人妻| 亚洲 欧美 91| 999综合色| 综合色久欲| 91性感在线| 亚洲人妻中文在线视频| 超碰成人免费| 欧美性爱一区| 亚洲风情综合网| 日日摸天天爽夜夜欢| 日本一区二区三区午夜观看| 996热| 人妻天天操天天爽视频免费| 黄色一区三区| 91精品人妻偷情| 最新国产亚洲精品精品国产亚洲综合 | 亚洲综合97中文网| 偷拍色图| 操逼精品视频| 亚洲 欧美 色图| 婷婷丁香九月| 啪啪视频mP4| 精品一二三区女同| 大屁股人妻女教师撅着屁股| 欧美性天天影视| 亚洲区限制级 99| 一区二区中文| 色婷婷狠狠| 99精品久久久久久| 欧美日韩大黄片| 大香交伊人网| 精品高清牛人盗摄一区二区三区中文字幕A片免费在线观看 | 97久久久久久久久久| 天天视频黄| 99热亚洲| 97欧美资源| 乱伦1色页| 美腿色图| 国产女人视频三四五区| 国产成人无码高清| 亚洲男人天堂2| 91人妻精华帖| 动漫区日韩区欧美区| 男人的天堂2019| 国产原创剧情在线丝袜 | 人人操人人uiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii | 五月天激情婷婷| 日日日日做夜夜夜夜做无码97| 自拍偷拍 日韩欧美| 色色五月天婷婷| 麻豆尤物视频网| 欧美刺激色黄片免费看| 久久精品综合| 十八禁啪啦拍视频无遮挡| 蜜臀无码一区二区| 丝袜熟女一区二区三区| 深夜激情 | 99蜜桃臀久久久欧美精品网站| 日本不卡一区| 国产日本熟女顶级一区二区三区视频 | 亚洲女优有码无码高清| 日本123区操B视频| 亚洲 日本 不卡| 另类图片五月天| 全国男人天堂网| 激情视频网址| 男人亚洲天堂| 国产日韩欧美| 日本午夜久久电影| 日韩97在线| 清柠毛片| 蜜臀人妻少妇久久在线观看| 日本黄大片在线观看视频| 91女网站| 日韩性爱毛片操骚逼| 亚洲综合小视频小说在线观看| 91性高朝久久久久久久久| 91精品人妻一区二区-全集完整版免费正片国语-B02AV | 久99热| 女生久久网| 亚洲不卡不卡中文字幕不卡| 亚洲h片在线免费观看| 蜜臀AV成人精品蜜臀| 99re公开精品免费视频| 亚洲日精品| 91男女啊啊啊| 嫩草一区二区在线观看| 精品国产一区探花在线观看| 欧美在线中M| 最新欧洲欧美日本激情网站| 91丨九色丨国产丨人妻在线 | 亚洲精品国产熟女久久久久久| 91人妻久久久久久久久久久久久| 天天天天操| 日韩免费高清大片在线| 亚洲激情深爱文学小说网站| 天堂蜜桃无码视频一区二区| 奇米四色影视777久久久| 亚洲se电影| 欧美专利1区2区3区4区5区免费| 草草影院日本第一页| 欧美激情黑人| 久久只有精品一区二区三区| 激情婷婷五月天| 1769国内精品视频| 深喉吞精| 激情婷婷丁香| 动漫片子网站3黄| 午夜120视频在线观看| 色欧美在线| 熟妇艹鸡八| 中文字幕 码精品视频网站| a亚洲欧美色欲| 爱丝福利| 久色99999| 白嫩嫩一区| 乱伦系列一区二区| 国产一级137片内射麻豆| 国产嫩草精品A88AV| 中国黑人三级片网站上区| 1024香蕉视频| 超碰99在线观看| 日韩欧美综合激情| 香蕉黄色一级视频| 神马久久久久| 亚洲欧美日韩不卡人妻| 97国产精品一区| 青青草国产一区二区三区| 久久综合久久综合人久久夜精品| 国产免费一区二区三区最新不卡 | 清纯唯美亚洲另类| 大香蕉日韩欧美| 国产精品视频播放| GVH-003 母子姦 青木玲-麻豆视频,麻豆视传媒短视频网站入口,麻豆视传媒官网直 | 91久久堂| 亚洲少妇在线影音| 欧美狠狠操| 鲁鲁色综合网| 夜夜操91744565| 国产精品久久久亚洲一区| 99久久久久| 成人性爱电影一区二区| 亚洲九月丁香| 丁香六月激情综合| 超碰国产情侣自拍网| 五月激情综合网| 久青草影院| www.久久爱| 这里只有精品视频在线| 婷婷亚洲天堂| 北京专精特新企业招聘信息| 熟妇高潮一区二| 九九九久久久久| 玖玖爱一区在线| 日本东京热大香蕉a片| 久久中日麻豆| 国产亚洲日本| 久久久久熟女| 美女天天干| 五月天久久综合网| 亚洲一级特黄大片在线播放91| 天天干干天天干干| 色综合九九| 性爱综合网| 欧美日不卡| 嫩草 人人网精品| 欧美少妇色综合| 狠狠干妹子| 97免费视频在线| 人人摸人人入| 国产一区二区三区白丝| 操逼操操操91| 久久精品一区| 91亚洲狠狠色| 久久久久97| 久久久久久亚洲中文| 国产精品久久久久综合| 色综合中文字幕不卡| 伊人青青草久久| 中文子幕一二三| 超碰97男女| 欧亚无码视频| 人人色人人操在线| 射丝袜高跟鞋99| 97超碰人操| 亚洲资源站| 激情五月综合开心五月| 996热| 欧美一二在线| 9I1性色影院| 天天看夜夜看日日干| 人人摸人人叼| 久久精品一区| 精品久9| 国产综合网站在线播放 | 俄罗斯一区二区视频在线观看| 日本岛国黄色网址| 99综合自拍| 久99在线免费观看视频| 欧美成人四级在线播放| 97干com| 日韩精彩视频| 五十路六十路素人熟女| 男人天堂2019亚洲| 亚洲精品97久久中文字幕| 久久久国产av美女私房| 亚欧精品久久久久久久久久久| 九九九久久久久| 91综合熟女| 99日精品欧美国产| 青青草字幕AV| 成人七区| 五月天色电影| 久久的免费性爱视频| 激情五月天色色网| 国产后入清纯| 国产三级多多影院2022国产AA一级毛片无码 | 亚洲精品日日夜夜52| 国产美女激情| 国产家庭乱伦性爱视频| 97久久精品国产| 亚洲欧美电影| 久久9精品视频| 国产欧美另类久久久精品课程| 亚洲成人福利电影免费| 综合91网| 国产精品激情久久久久久久| 色在线69堂| 超碰国产精品久| 男插女青青影院| 亚洲97成人在线观看| 天天影视网综合少妇| 欧美一区二区| 啊啊啊好爽快点啊啊啊嗯嗯| 日韩有码专区| 极品色社| 草草电影院| 亚洲人成色9999精品久久 | 久久婷婷国产一区二区色| 传媒在线观看一区二区三区| 五月丁香婷婷综合| 亚洲欧美首页| 色好看av| 国产精品美女在线一区| 9999久久久久| 亚洲免费看片| 诱惑网综合| 熟妇熟女亚洲天堂网| 操逼网站网站| 秋霞鲁丝午夜无码一区二区三| 无码在线亚洲| 风韵犹存大大大大香蕉 | 五十路熟女,国产欧美精品区一区二区三区| 嫩草影院性色| 91色宗合| 人人澡综合涩| 青青草天天亲夜夜操网| 日韩在线观看三级电影| 亚洲综合性感在线| 欧美三级中文字幕hd| 密臀在线视频| 欧美成人精品一区二区三区| 国产亚洲精品农村妇女| 亚洲美女精品九九视频| 日韩人妻网站| 中文字幕精品区先锋资源| 国产精品久久泡妞网站| 日产中文字幕2020| 一区二区三区精品久久| A级在线视频| 91劲爆| 超碰97欧美在线| 伊人久久在线视频观看| 中文字幕成人乱码熟女精品国50| 婷婷色香| www.久久| 久久成人午夜精品影院| 蜜臀中文字幕| 久久久久久人| 色大香蕉97N| 五月天婷婷成人网| 思思热国产在线视频| 亚洲综合网91| 久热大香蕉网站| 久久久久久性爱片| 亚洲色诱惑| 免费福利视频中文字幕| 国产精品播放| 亚洲日韩狠狠撸视频| 密臀在线免费观看| 屌逼传媒| 5月婷婷6月六月丁香| 国产精品国产亚洲区艳妇糸列| 91热色| 超碰中文字幕人妻草一区| 亚洲 日本 一 二 三| 婷婷午夜成人色中色| 亚洲国产精品无码AV久久| 亚州五月| 9九九国产| 欧美亚洲美少妇一区二区| 91爱综合| 国产精品久久久 | 色在线亚洲视频www| 丝袜色综合| 欧美亚洲20p| 蜜臀av在线播放一区二区三区| 大香网站| 亚洲高清国产理伦片| 亚洲春色一区二区三区| 日本 情色 1区| 少妇精品久久久八区九区| 99热这里都是精品| 人人九九精| 99色热| 欧美一区二区亚洲天堂| 美国aaaaa一级黄片| 高清国产精品无码| 韩三级a视频在线观看| 高清国产精品福利网站| 国产后入| 亚洲伊人成综合成人网| 张柏芝国产一区在线观看| 另类欧美色| 美欧色综合| 国产suv一区二区三区6| 国产一区在线看| 超碰欧美97| 毛片久久| 午夜男女爽爽爽影院视频| 久久夜夜| 翔田千里爆乳巨臀无码| 人人干黄色| 涩涩涩综合| 国产精品无码av| 一级久久久久久久久久久| 综合欧美日韩在线观看| 岛国成人av在线播放网址| 国产超碰人人操| 男人兔费天堂| a男人的天堂| 大香蕉在线免| 视频在线中文字幕| 亚洲美女高潮喷水视频| 色噜噜狠狠色综无码久久合欧美| 日韩一级二级| 久操B网| 78久久久| 国产精品国产| 嗯嗯啊啊操我| 午夜.DJ高清在线观看免费7| 日本一级性爱| 91丨国产丨白浆| 性色av一区二区| 国产在线激情| 性色av大全| 国内自拍 日韩激情 99| 亚洲精品一区二区三区新线路| 97欧美色资源| 欧美亚洲首页| 视频黄色国产一级| 色99视频| 久神马| 四虎免费在线观看| 国产精品一级毛片不卡视| 婷婷久久五月| 中文字幕女同在线| 中文久久久| 黑丝自慰喷水网站| 日本亚洲vr欧美不卡高清专区| 无码久| 亚州综合色| 国产浮力影院第1页| 99re6国产精品99re在线| 日韩中文字幕宗合在线| 国内伊人久久久久久网站视频| 婷婷五月天激情四射| 五月天综合网| 欧美18老人禁| 亚洲九月丁香| 五十路六十路素人熟女| 天堂中文日本在线观看| 婷婷三区| 色香天天| 中文字幕jul-617人妻熟女| 欧美高清性猛交| 97视频免费| 日本一本道A级黄色毛片试看60分钟| 国产精品经典一卡久久久| 殴美色网| 国产日韩欧美三级片| 天美欧美国产| jazzjazz国产精品麻豆| 97WW精品| 蜜臀久久久99久久久久| 色婷婷五月综合激情中文字幕| 伦在线97| 欧美亚洲第一页| xxx亚洲午夜天堂| 中文字幕乱亚洲美女精品一区| 欧美网站免费| 99精品丰满人妻无码| 国产在线激情视频| 超碰 av 女人天堂| 操逼无码操逼| xxx亚洲午夜天堂| 热99这里有精品综合久久| 婷婷99狠狠| 亚洲色图欧美色18直播在线| 亚洲欧美激情在线视频| 夜夜骑日日| 午夜福利视频在线一区| 九九免费影片| 强奸a片网| 国产精品午夜精品| 国模吧 一区二区三区| 一本色道久久综合狠狠操| 日操粉逼逼| 蜜臀99久久精品| 日本午夜福利影院| 91综合网在线| 国产不卡片| 男女做爰猛烈动高潮A片免费应用 少妇厨房愉情理伦片bd在线观看 不卡中文字幕aⅴ在线 | 国产亚洲深夜激情| 天美欧美国产| 91精品啪在线观看国产城中村| 亚洲AV在线资源| 偷看洗澡一二三区美女| 后入合集| 99热这里只有精| 性色av大全| 人妻黑丝袜电影| 国产麻豆一级精品视频| 日韩大香蕉AV影片| a男人的天堂| 涩涩涩综合| 一级免费精品| 欧美|91色综合| 欧美的性爱网站免费| 加勒比伊人综合| 日本丝袜人妻内射| 97精品国产精品免费观看| AV九九| 国产久久久久久| 欧美性第一页| 97超碰热线| 亚欧Av| 久久精品店| 日韩精品9999| 亚洲欧美经典一区二区| 日韩一级欧美一级国产一级台湾| 久久极品一区二区| 太久视频| 天美91| 日韩欧美偷拍美女视频| 伊人五月天| 国产精品黑人一区二区三区| 亚欧美色图| 男人天堂.AB| 丁香五月综合| 午夜舔阴达高潮视频免费看| 青青草一区二区三区四| 日韩美女久久一区二区三区| 黄片aaaaa一区| 91精品人妻一区二区-全集完整版免费正片国语-B02AV | 色哟哟511老熟女| 9118禁| 在线情色电影 91大 | 东北女人操比视频| 天天狠| 欧美国产伊人久久久久| av亚欧| 四虎在线视频| 成人久久久精品| 久久色激情一区二区三区| 黄色一级视| 国产精品久久久久久久电影渣男| 2017,超碰| 蜜桃丰满熟妇av无码区不卡| 无码heyzo高清一区| 欧美日韩性爱视屏免费看了| 日日夜夜精品| 免费成人在线观看91| 欧美色综合网| 亚洲狠狠入| 日本 色 导航| 色激情综合网站| 高清视频一区| 日韩射图| 情色大香蕉| 搡老熟女国产1000部| 玖玖资源中文字幕制服丝袜| 色呦呦、国产精品| 欧美|91色综合| 狠狠综合网| 欧美日不卡| 78m啪啪啪| 91在线一起| 国产精品粉嫩福利在线| 亚州九九九精品视频| 区二区亚洲婷| 中文字幕人乱码中文字的预防方法 | 亚洲中文国际强奸字幕| 男人天堂黄片| av天堂精品久久| 国产精品视频麻豆入口| 亚洲国产尤物yw在线观看| 久久久久久人妻一区精品色欧美| 伊人网青青| 无码免费在线观看黄色片| 欧美高清18A片| 狠狠色噜噜狠狠狠狠2018| 国产欧美日本亚洲精品| 免费观看网黄| 国产精品美女久久久久AⅤ国产馆| 免费久久一级毛片大黄| 美女尤物人人操| 人妻日日干| 爽 好舒服 无码刺激久久| 日本色婷婷| 精品区9| 这里是精品| 18岁禁 茉莉成人久久| 伦在线97| 少妇高潮九九九九九九九| 中国和日本人色哪个不下载能放| 天天cao在线| 午夜国产成人精品视频| 欧美极品性爱天天射| 蜜臀操逼黄色视频操的好爽| 五月天婷婷基地| 97视频观看| 高跟伊人julia ann| 午夜久久久| 91色婷婷综合久久中文字幕二区| 色色毛片| 日本色色色色色视频| 91蜜桃婷婷狠狠久久综合9色| 亚洲……91| 中文字幕女同在线| 欧美日韩欧美| se吧提供国产乱老熟视频胖女人| 国产强奸超碰AV| 97国产色综合| 另类专区加勒比| 97国产人人| 乱伦av.com| 男人亚洲91首页在线| 久久日本熟女精品一区| 欧美激情内射| 91亚洲色人| 丁香五月综合| 久久精品视| 性色亚洲| 欧洲熟妇xxXx欧美老妇裸体| 人人手机欧洲亚洲国产人妻| 精品9999| 情趣丝袜无码操逼视频| 91久久婷婷| 久久一本大香蕉| 呦呦一区| 67194国产| 亚洲人码13| 日本伦乱九九九综合| 偷窥自拍A片| 嗯嗯啊啊视频一区二区三区| 国产一二三在线视频五十路| 色噜噜精品一区二区三| 99自拍B亚洲| 欧洲综合色| 久久久久久久国产a∨| 亚洲熟女乱色| 精品国产AV一区天美传媒| 久草视频在线视频在线视频在线观看 | 亚洲伊人久久精品影院| 凹凸视频在线一区二区| 桃色五月天| 公司1区2区3区精产精| 欧美日韩另类在线| 欧美老熟另类| 九九九九精| 97福利视频| 超碰97综合网| 自拍偷拍 日韩无码| 区二区亚洲婷| 激情 欧美 亚洲 小说| 99久久无色码| 99无码| 国产成人亚洲精品自产在线| 人妻另类| 国产伦精品一区二区三区在线观 | 久久久久亚洲熟妇熟女| 人妻天天操天天爽视频免费| 男人天堂新在线| 九九热精品| 国产免费小视频| 亚洲中文字幕av| 国产熟码AV| 熟女视频久久| 欧美激情 亚洲色图| 国产精品久久久三级无码| 国产精品久久久久久夜夜夜夜| 国产成人自拍视频视频| 欧美另类自拍 | 手机在线视频国内精品| 99热这里只有是精品10| 黄片免费看的| 97视频在线视频| 日韩精品视频在线观看一卡二卡| 国产高清在线自在拍69| 福利色色| 另类欧美色| 色穴精品| 欧美人人曰人人操人人射射| 久久久111| 高跟丝袜AV专区国产| 欧美亚洲高清晰| 成人午夜无码视频| 97色综合中文网| 色色操| 色逼综合| 色91综合网| 日本免费中文字幕在线| 久草精品一区| 操人91| 国产一区二区二区按摩精品啪视频| 色精品极品| 无遮挡一级毛片视频免费的| 加勒比人妻综合| 熟女啪啪视频| 国产精品视频白浆免费| 成人乱码一区二区三少妇| 亚洲AV成人无码久久精品播放| 91蜜臀熟女| 97就爱干| 99re超碰| 亚洲.欧美.丝袜.中文.综合| 蜜乳av首页| 久久久久久精| 日本东京热大香蕉a片| 亚洲一欧洲中文字幕在线| 人妻少妇无码| 绯色AV粉色AV蜜臀AV| 国产精品久久久久久片| 亚洲影视综合| 中文字幕女同在线| 五月丁香色综合| 精品人妻1区| 久久久久国色αv免费观看| 欧美最婬乱婬爆婬性视频| 亚洲欧综合另类无码一区| 蜜臀久久99精品久久久久久| 久久久久网站-538在线视频-欧美永久乱码 | 夜夜高潮夜夜爽高清视频一| 人人摸人人干人人拍97| 中文字幕后石码三区四区| 好吊爽好吊爽在线视频,中文字幕精品一区二区日本,国产良妇出轨视频在线观看, | 国产精品自拍xxxx| 校园春色 欧美| 精品视频久久区| 91九色丨国产丨爆乳| 欧美精品日韩一区二区| 久热精品在线国产| 亚洲欧美97| 超碰97首页| 啊嗯好大视频在线观看| 九九黄色网| 岛国视频免费在线观看| 久久久性| 中国特猛少妇色xxx| 超碰97欧美日韩| 嫩草 人人网精品| 狠狠干狠狠色| 久久精视频美日韩在线视频| 免费自拍三级综合| 2024年最新色情网站在线观看| 精品少妇高潮久久| 99热18这里只有精品| 女人一区| 精品网站9999| 9/A片| 精品一区二区啪啪啪| 很很热性爱视频| 老司机老司机午夜影院| 91精品微拍福利| 在线播放成人高清免费视频| 欧美色999| 亚洲熟妇A V黑人| 亚洲欧洲日韩中文字幕一区| 国产精品3| 久久综合久色欧美综合狠狠 | 超碰在线成人电影| 亚洲欧美日韩国产丝袜自拍中文| 91久久18禁| 69视频福利导航| 久久一二三级一一一| 亚洲色图 欧美热图 清纯唯美 另类自拍| 丁香婷婷久久| 婷婷五月在线视频| 五月香婷婷| 欧美午夜精品久久久久久3D| 五月天开心网| 伊色综合天堂色97| 久操高青| 国产性刺激| 最新精品久久蜜桃 | 十八禁视频一区二区| 日韩性爱小视频| 搡老熟女免费视频| 久艾草在线精品视频在线观看| 91久久免费视频互動交流 | 欧美国产有色电影| 亚州日韩97| 东京热大香焦| 中文字幕欧美精品亚洲日韩蜜臀| 亚洲日精品| 快灬快灬 一下爽蜜桃在线观看| 9久久精品| 东北少妇高潮zzzz| AAAAAAAAA黄片| 视频分类 国内精品| 亚洲操逼网| 性感女人网页在线观看视频| 亚洲 欧美 小说| 极品一区二区三区免费| 97国产|免费| w w w.久久精品| 久久久久久亚洲中文| 爱媛媛久久国产福利| 青青草操逼逼视频| 亚洲A色| 欧美精品,四区。五区| 偷拍盗拍亚洲色图图片| 精品国产一区探花在线观看| 18禁免费视频| 丁香激情五月天| 口爆欧美91| 玖色av| 午夜福利一区二区影院| 亚洲综合精品国产一区| 97天天摸天天碰| 人妻少妇色综合| 午夜一区| 亚洲成人av电影在线| 成人在线日韩| 少妇三P| 欧美激情亚洲| 在线无码视频| 激情五月婷婷| 丝袜亚洲91| 三上悠亚在线毛片91| 国产精品制服丝袜清纯唯美| 女同在线视频一区| 97视频在线免费播放| 欧美综合自拍| 午夜寂寞欧美| 国产嫩草精品A88AV在线| 蜜桃网熟妇| se01国产在线视频| 中文字幕一区av| 亚洲清纯唯美| 美女天天干| 九月婷婷综合| 丝袜美女诱惑 91 视频| 亚洲综合首页| 亚洲九区| 精品少妇人妻| 国内毛片热久久思思热| 国产视频一区二区免费| 日韩精品人妻系列无码天堂| 网友自拍第1页 | 色亚洲欧美| av在线一区二区三区| 日韩一999精品| 精品免费囯产一区二区三区| 日本操逼二区| 熟女自慰久久久| 国产捆绑一区| 91黑丝在线播放| 玖色av| 久久无码电影| 麻豆国产成人精品| 亚洲码在线中文在线观看| 五月激情小说| 欧美色91| 极品色www影院| 欧美精品欧美精品系列| 国产91精品福利在线| 国产肏屁眼视频| 国产一区二区三区白丝| 免費人妻夜夜爽天天爽爽一区| 亚洲综合在线第一页| 欧美性爱五月天| 亚洲少妇综合| 三级三久久线久久99久目本WW| 国产精品久久久久久夜夜夜夜| 强奸乱伦亚洲第一页| 试看福利| 色五天伊人| 九九自拍伦理| 午夜福利精品| 亚洲清纯唯美| 日韩不卡a级视频专区| 久久↗↗| 日本肏逼视频在线观看| 国产自偷| 亚洲婷婷五月天| 青青草中文字幕| 色性荡荡荡荡视频| 亚洲成人精品在线一区| 爱啪精品一区| 在线a v| 国产精品97超碰| 综合色99| 友优传媒精品在线一区二区| 在线 制服丝袜中出 人妻| 亚洲风情在线观看| 暖暖精品二区三区观看| 亚洲**2021在线观看| 97视频在线观看高清资源| 搞中出久久| 四季av一区二区凹凸精品小说| 色五月综合网| 青青草这里只有精品| 最新国内自拍av免费| 精品夜夜澡人妻无码| 色综合加勒比| 无码视频一区二区| 欧美亚洲日本视频久久久| 九九九九亚洲| 人妻激情偷乱视频一区二区三区| 青娱乐休闲视频在线观看| 在线观看A啊啊啊| 大香蕉黄色一级片免费看| 亚洲自拍青操视频| 黑丝内射一区二区三区| 天天干夜夜操一区二区| 亚洲操操| 东京热视频网| 超碰精品97| 97在线免费看| 国产精品麻豆视频网站| 超碰色97| 日本最新免费韩国1区2区视频播放| 在线一道啪| 另类欧美色| 久操在97| 欧美色五月| 国产精品盗摄 偷窥盗摄| 日韩欧美蜜桃精品久久中文字幕久久| 粉嫩国产精品久久粉嫩| 国产JDAV无码视频在线观看| 9.1小视频| 久久一二区四| 国产日产精品久久快鸭的功能介绍| 国产乱不卡| 97硬碰| 五月丁香综合网| 老熟女乱伦一区| 水滴偷拍| 国产情色在线| 性色高清在线| 人人爱人人操人人性| 国产性爱强奸乱伦大全| 欧美综合777| 久久草草欧美精品| 思思热久久成人| 日韩成人无码| 一区二区三区一亚洲中文字幕、综合区灬 | 美国aaaaa一级黄片| 中文?日韩?免费?精品| 久久宗合97| 激情亚洲天堂| 天美传媒国产原创中文字幕亚洲欧美另类 | www.91理论| 97香蕉网| 欧美日韩色| 视频在线97| 啊灬啊灬啊灬啊灬高潮奶出了免费视| 91黑丝在线播放| 日韩免费性爱视频在线观看| 久久人人爽爽人人爽人人片αV| 青娱乐淫乱1314| 99AV| 国产精品午夜精品| 欧美影音在线| 欧美综合在线91| 殴美牲| 日韩啪啪啪啪啪| 综合激情五月丁香| 黄色片大香蕉| 中文字幕国产| 91搞逼视频| 国产精品麻豆成人av| www国产无码| 国产精品久久久久久久久久久久久久| 国产熟女自拍| 久久久91福利姬| AV在线播放网址| 亚州 综合 色图| 农村妇女精品一区二区| 久久精品一区| 精精夜夜| 中文字幕在线观看丝袜| 色婷婷影视| 91美女中出| 啊…啊…操我用力操我| 久久婷婷色| 开心五月婷婷| 又黄又爽在线观看视频| 亚洲欧美九九| 久久乐| 亚洲天堂性爱| 青青草原综合久久大伊人精品| 顶级少妇BT天堂| 98一区二区精品| 日韩一区二区熟女| 久久超碰97中文字幕| 久久伊人青青草| 欧美中字二区| 久久久久幕乱码| 日韩精品午夜操呦呦不卡影院|