日韩精品一区二区三区在线视频放-无码中文字幕V?一区二区-成年片免费观看视频-国内少妇人妻丰满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ì)從來不是“自動拆分”而是“顯式聲明精準(zhǔn)控制”。這個項目就是一套可落地、可調(diào)試、可驗證的多數(shù)據(jù)源切換實戰(zhàn)方案它不依賴黑匣子中間件的自動路由而是用Spring原生AbstractRoutingDataSource 自定義ThreadLocal上下文 顯式數(shù)據(jù)源標(biāo)記把“哪個線程該用哪個庫”這件事從配置文件里拽出來寫進代碼里、打在日志里、壓測時能一眼看穿。適合正在被跨庫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ù)語義標(biāo)記比如TargetDataSource(write)中間層是分片鍵自動識別比如方法參數(shù)含userId且當(dāng)前策略為user_id分片最內(nèi)層是線程級強制綁定比如開啟事務(wù)時鎖定主庫。三者優(yōu)先級從高到低沖突時以手動標(biāo)記為準(zhǔn)。這種設(shè)計避免了“全局默認(rèn)庫”帶來的隱式耦合也繞開了中間件對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í)行鏈?zhǔn)脚袛嗝看蝛ey生成后自動記錄到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. 回退到默認(rèn)策略如讀寫分離下的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: 存儲當(dāng)前請求的分片標(biāo)識如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)注解標(biāo)注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 # 默認(rèn)寫庫 strict: false # 非嚴(yán)格模式未匹配到數(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負(fù)責(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); // 避免負(fù)數(shù)取模問題 return shard- String.format(%02d, shardIndex 1); // shard-01 ~ shard-04 } }這種解耦讓DBA可獨立修改分片規(guī)則改YAML而開發(fā)只需維護算法實現(xiàn)雙方無需協(xié)同發(fā)布。4. 避坑指南5個真實踩過的坑省下你三天排查時間分庫分表不是配置完就能跑通的銀彈而是處處埋雷的精細(xì)活。以下是我在某高校實驗室模擬項目X中連續(xù)兩周壓測時踩出的5個典型問題每一條都附帶復(fù)現(xiàn)條件、根因分析和可立即驗證的修復(fù)方案。4.1 現(xiàn)象事務(wù)內(nèi)跨庫操作不報錯但部分SQL實際執(zhí)行在錯誤庫上原因Transactional默認(rèn)傳播行為是REQUIRED當(dāng)方法A調(diào)用方法B時若B未聲明事務(wù)其數(shù)據(jù)源路由會脫離A的事務(wù)上下文導(dǎo)致B的SQL走默認(rèn)庫而非事務(wù)綁定庫。解決在Transactional方法內(nèi)所有子調(diào)用必須顯式聲明Transactional(propagation Propagation.REQUIRED)或統(tǒng)一使用TransactionTemplate手動控制。更徹底的方案是在DataSourceInterceptor中檢測當(dāng)前是否在事務(wù)中若在則強制將forcedKey設(shè)為事務(wù)起始時的key。4.2 現(xiàn)象MyBatis二級緩存命中但返回的數(shù)據(jù)卻是舊庫里的臟數(shù)據(jù)原因MyBatis的CachingExecutor在查詢前會先查緩存而緩存key未包含數(shù)據(jù)源標(biāo)識如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捕獲所有異常并返回默認(rèn)key同時記錄ERROR日志“Failed to determine data source key, fallback to default”。4.4 現(xiàn)象單元測試中Test方法能正確路由但集成測試SpringBootTest總是走默認(rèn)庫原因Spring Boot Test默認(rèn)使用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無法提取分片鍵路由引擎按默認(rèn)策略如READ隨機選一個庫執(zhí)行而非廣播到所有分片庫。解決對這類全量聚合SQL必須顯式使用TargetDataSource(broadcast)注解并在BroadcastRouter中實現(xiàn)遍歷所有匹配分片庫分別執(zhí)行SQL再合并結(jié)果集。注意COUNT(*)需用SUM()聚合GROUP BY需用UNION ALL去重。5. 運行與驗證從啟動到壓測五步確認(rèn)路由完全受控光跑通不算成功必須驗證每條SQL都落在預(yù)期庫上。本項目提供了一套開箱即用的驗證流水線不依賴外部工具全部基于Spring Boot Actuator和自研Endpoint實現(xiàn)。5.1 啟動檢查確認(rèn)數(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攔截驗證確認(rèn)MyBatis執(zhí)行的確實是目標(biāo)庫啟用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)走默認(rèn)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的嚴(yán)重傾斜。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分片庫項目當(dāng)前只支持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ā)默認(rèn)策略。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
返回資訊列表
久久精品黄色| 麻豆91熟妇人妻中文字幕茄子| 三级色综合| 91久久九九精品国产综合| 密臀视频三区免费网站| 日日摸日日碰夜夜爽视频| 蜜臀AV一区二区三区激情综合| 午夜亚洲国产理论秋霞| 视频国产欧美在线播放| 亚洲国产精品无石码久久 | 亚洲AV成人精品网站在AV| 91bbb| 91熟女网| 激情干在线| 欧美性爱97超碰| 日韩中文字幕av在线播放| 五月天加勒比啪| 外站AV在线| 国产久久av| 美国人人操人人操| 伊人久操| 七久久久| 日韩av熟女一区二区三区成人| 亚洲色图欧美另类在线| 大香蕉中文在线| 日本成人免费一区二区三区| 一区二区三区精品黑丝白丝酒店对鸡 | 浓厚中出中文字幕在线| 国产成人无码网站在线视频| 久久久久久久久久久久久久久久9| 亚欧美色| 可以免费观看的AV| 国产精品久久泡妞网站| 国产精品免费美女视频| 男人天堂综合| 日产操逼| 国产老熟女| 97天天| 亚洲图片偷拍视频区| 亚洲自拍欧美色综合| 91人妻少妇| AV九九| 中文字幕一二三av| 日本在线视频导航| 精品日韩产品在线,日韩在线不卡视频,欧美日韩免费专区/久, | 亚州综合电影| 久久久久久人妻一区精品色欧美| 男人的天堂激情| 97超碰站| 玖玖草久草99蜜月一区二区三区| 强奸乱伦日韩AV| 加勒比性爱成人在线| 国产精品自在线发布| 国产一区二区久久| 97人人模人人爽人人| 国产精品3| 亚洲精品中文字幕一区在线视频 | 乱老熟女一区二区三区| 人妻夜夜爽天天爽三区麻豆AV网站| 在线看的av| 第45页一区二区| 天天操天天射天天日| 久操在97| 国产高清成人传媒影视| 999999精品| 美女露胸露奶头| 国产黄色视频久久| 熟女AV一区| 丁香五月综合| 淫荡网址| 亚洲中文字幕一区| 操人妻逼91| 自拍偷拍 日韩无码| 亚洲不雅视频1区二区| 亚洲av性爱电影| 伊人96在线| 亚洲欧美激情在线视频| 亚洲精品国产无码高清| www欧美91| 有码色中文字幕在线观看| 最新日韩黄片| 日本三级一区二区 在线| 青草精品视频一日本久久久久网站| 丁香五月天视频| 岛国毛片手机在线观看| 婷婷色色五月天福利| 欧美日韩精品青青| 好色综合| 夜夜骑操视频| 蜜臀AV成人精品蜜臀AV久久| 色一射色一射| 岛国小电影| 精品久久久久,69国产成人精| 免费人成在线观看网站品爱网| 亚洲天堂久久| 色欧美色交综合| 天天操天天射青青草| 亚洲最大成人a毛毛片| 91天美免费| 日韩美女高潮喷水视频| 91精品久久久久久综合五月天| 欧美AAAA黄片| 日产欧美电影一区二区三区| 天天日夜干| 久久同城AV| 91夜夜蜜桃臀1区2区3区| 成年女人18级毛片毛片免费观看| 啪啪资源网| 操逼视频色| 99热| 欧美综合天堂| 国产老女人久久毛| 欧美综合另类| 亚洲人成网站7777| 日本人妻最新在线中| 密臀在线视频| 欧美 亚洲 第一页 | 亚洲欧美天堂在线| 日日操免费视频| 国产1024在线播放| 狠狠色噜噜狠狠狠狠2018| 日韩中文字幕精品一区在线| 九色精品视频导航1| 国产麻豆福利av在线播放| 精品高潮| 亚洲97成人在线观看| 亚洲导航深夜福利| 欧美黑人猛交春色影视大全| 丰满熟女人妻一区二区三五十一路| 久久久日本电影| 国产强奸无码乱伦| 久久久久久AⅤ无码免费肉站 | 后入式五六区| 青青五月天| 97在线免费视频观看| 欧美国产有色电影| 久久亚码| 天久久久噜噜噜久久国产精品爽爽| 99热这里只有精品18| 人人操人人色网| 操啊国产| 久久艹逼视频| 欧美图片偷拍| 99久在线精品99re8热视频在线| 日韩欧美天天爽爽爽天天爽爽| 欧美91网站| 妇女视频网站| 激情综合网一盗摄| 欧美精品一二三| 国产福利精品最新在线| 五月天综合| 97色97好| 中文字幕欧美丝袜07资源| 人人操人人操人人人操| 歐美一級亂黃99在綫精品| 肥臀熟女福利视频一区二区| 欧美综合网1| 日本不卡在线二区三区| 久久精品 六十路 熟女 欧美| 久久久国产亚洲精品系列| 久碰视频| 蜜桃臀一区二区aV| 爽极品影院| 五月丁香激情综合网| 亚州色国| 美女操逼福利视频| 精品网站9999| 欧美熟妇精品黑人巨大91| 秋霞一级鲁丝片A片| 翘臀vidoes| 青草伊人网| 激情五月综合开心五月| 99.色网| 超碰超碰超碰超碰的大鸡吧操黑丝袜 | 97精品一区二区视频在线观看| 日韩卡一卡二卡三在线| 国产第二页| 久久精品毛片免费不卡| 久久 亚洲 日韩 人妻| 亚洲精品久久久久久久蜜桃臀| 无码少妇精品一区二区60岁老人| 亚洲精品一卡二卡三卡福利视频网站| 澳门黄片一香蕉视频| 丁香五月综合| 777超碰| 人妻少妇av在线观看| 东京热熟女亚洲视频网站| 91成人18| 亚洲熟妇丝袜在线观看| 黄总AV色图| 亚洲av成人精品一区| 欧美精品第四五页中文字幕在线观看| 日韩综合无码色欲vv| 乱子伦一区二区三区国产精品| 亚洲AV成人无码一二三久久| 97视频新免费| 秋霞视频一区二区 | 精品一区二区三区蜜桃臀赵总 | 午夜αv| 蜜桃在线观看一区二区三区 | 99综合网| 日韩中文字幕国产| 91精品网站| 亚洲drav色图| 欧美色图成人网一区二区| 伊人五月天| 99久久精品无码一区二区| JIZZJIZZ亚洲女人被躁| 超碰色97| 男人的天堂Va| 91国精产品| 麻豆AV一区二区| 91狠狠综合久久| 国产亚洲日韩在线三区黑人| 亚洲 欧美 制服 另类 自拍| AV男人天堂网| laoshunv91| 久久精品视-一级做a爰片性色毛片16美国-中国女与老外在线精品 | 亚洲 另类 丝袜 自拍 动漫| 久久大香蕉| 一区不卡在线观看av| 欧美最大综合网| 麻豆人妻精品一区二区| 天天色天天干天天爱| 蜜臀网 一区| 91亚州欧美| 五月丁香啪啪啪| 日韩不卡在线一区二区| 新久久AV| 久久久久久久久久久免费精品| 中文字幕一区二区三区四五区| 日韩欧美蜜桃精品久久中文字幕久久| 少妇99| 99re6国产精品99re| 天天在线91| 人人爽夜夜操| 日韩国产欧美伦理在线| 99日免费视频中文字幕| 爱爱动态试试看6 0秒| 五月天色五月| 国产 三级自拍| 精品日韩人妻视频| 激情色图| 水滴偷拍| 久一区久久蜜桃| 久操大香蕉超碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰 | 91操碰| 日韩av影片在线观看| 麻豆国产尤物AV| 久操凹凸视频| 激情 欧美 亚洲 小说| 国产自制av蜜乳| 2023天天操夜夜操| 色综合国产在线观看| 中文AV制服乱伦| 爱妃国产亚洲视频中文字幕| 亚洲色图欧美一区二区不卡| 一起草三级AV电影在线观看| 国产理论视频在线播放| 97无码视频在线播放| 亚洲一区日韩精品| 亚洲欧美色图小说| 一区二区三区探花在线观看| 亚洲成人免费中文字幕| 国产 码在线成人网站| 丁香五月av| 婷婷五月天成人| ′ !γ}丶。。久久精品欧美一区二区三区| 中文啪啪视频| 骚妻少妇精品性色无码四色A V| 日日嗷| 亚洲se91| 国产在线视频午夜精华在| 深夜福利黄片| 婷婷综合五月| 欧美18禁91| 久9爱经典视频 | 无毛精品| 韩国午夜理伦三级好看| 精品人妻一二三四区视频| 欧美日韩大香蕉| 男人天堂.AB| 欧美激情综合网| 激情综合婷婷| 精久久久| 婷婷六月色开| 日韩在线观看AV| 成人午夜视频免费播放| 插插综合网天天影视网| 久久XX| 久久久一区二区三区麻豆| www.久久99| 亚洲中文字幕熟女少妇一区二区| 91 在线亚洲| 秋霞怕怕片| 精品96久久| 国产亲戚伦亲在线| 激情五月天社区| 亚洲AV色图一区| 任你爽视频| 天天网综合| 欧美 传媒 麻豆 日韩 偷拍| 91干熟女| 性综合网| 青青草在线成人视频| 日少妇视频| 中日高清无码操逼视频| 亚洲自拍小说| 五月婷婷色| 爱逼综合| 精产国品一区二三产品| 国产毛片久久久久久久| 欧美色日| 天天爽天天干| 亚洲色图一区二区三区| 欧美日不卡| 白嫩白嫩的午夜九久久久久久久久久久久成人剧场 | 欧美日韩久久精品爱爱| 超碰97起碰| 久久在线观看免费视频| 亚洲吊色| 麻豆人妻精品一区二区| 91久久免费视频互動交流| 91九九九小逼| 操91| 人人操人人搞人人草| 超碰天天去日穴| 亚洲欧美中文日韩视频中国语| 人妻少妇精品| 青青久草| 职场同事知名国产国产精品久久欧美日韩| 蜜臀精品1区2区| 天天干少妇| 秋霞影音一区二区三区 | 国产一区在线看| 亚洲欧洲激情| 78久久久| 91在线欧色| 亚洲一区二区三区欧美日韩| 日本在线观看网址| 久久久亚洲精品中文字幕人妻| 高清不卡国产| 99精品在线观看| 91操操操操| 久久婷婷苹果| 亚州色图狠狠干| 99精品无码| 欧美日韩性爱无码| 九九九九九九亚洲| 婷婷综合激情| 国产AV超爽| h无码动漫在线观看| 人人艹亚洲| 18禁免费视频| 亚洲色图欧美视频| 亚洲操操| 在线播放成人网站| www.色99| 人妻久久久久久久久久久久久久久| 亚洲天堂人妻熟妇视频| 麻豆国产精品午夜视频| 久久黄色性爱视频| 日韩性爱电影一区| 日本精品不卡一二三区| 日韩综合成人免费视频| 亚洲成成熟女人综合一区二区| x97av| 国产精品69久久久久久久| 91人妻丝袜无码| 最新欧洲欧美日本激情网站| 加勒比大香蕉视频在线| 亚洲成人av色网| 久久精品亚洲婷婷| 久草婷婷| 久久九精品| 国产丰满少妇久久久精品影院| 久视频在线观看| 人妻一区二区三区| 欧洲亚洲人妻无码久久三区四区| 亚洲色图综合| 777奇米影视777四色| 男人的天堂2018东京热啪啪啪| 亚洲春色欧美激情自拍| 操逼日韩无码| 欧美少妇第一页| 久久亚州大香蕉| 精品人妻无码一区二区三区不卡-精品人妻无码一区二区...|精品少妇一区二区三 | 极品销魂美女一区二区| 亚洲欧洲激情卡通另类文学四射小说网站| 亚洲国产精品无石码久久 | 美女91在线观看| 爱妃国产亚洲视频中文字幕| 欧洲欧美视频一区二区| 色牛牛AV| 国产日本熟女顶级一区二区三区视频| 日本超碰色精品| 性猛交| 自拍偷拍 日韩无码| 精品国产乱码久久久久久久久1| 美女主播色欲91抠b在线播放| 久久精品视| 一个人免费视频观看在线WWW | 青青草在线视频欧美| 国产后入清纯| 操逼网站网站| 久久婷婷影院| 亚洲综合射| 欧美激情区| 成人无码在线超碰网| 丁香五月性| 91丨精品丨国产丨丝袜| 超碰97人人cao| 亚洲 欧美都市激情| 伊人久大| 干婷婷综合网| 日本国产二线女色| 无遮挡h肉动漫在线观看| 极品久久久久久久久久久久久久| 日日夜夜免费| 日本曲间由美性生活片| 97久久国产| av一区二区三区 中文| 99色日| 亚洲av噜噜噜噜噜噜| 超碰99在线观看| 99999亚洲另类| 国产美女mm131爽爽爽爽| www.男人天堂| 老熟女乱伦一区| 国产毛片精品一区二区色欲黄A片| 久超碰这里只有精品| 啊啊啊啊嗯嗯嗯用力好爽 | 97天天操| 偷拍欧美激情| 一线黄色免费性爱片| 九草九九九| 在现视频女上位好爽| 啪啪啪东京| 高清肉丝中文无码| 曰韩av中文字幕专区| 偷拍导航视频网站| 色婷婷影视| 超碰美国| 91激情国产| 96精品在线| 欧美日日操| 国产久久久久久| 2019男人的天堂| 精品国产一区二区三区久久久蜜臀| 成人黑料社久久| 国产熟女完整版中字| av网站国产主播在线| 久久久久亚洲?V片无码V| 91国产伊人大香蕉| 久久香蕉超碰97国产精品| 120分钟婬片免费看| 日本免费中文字幕在线| 中国少妇啪啪视频| 人妻熟女一区二区在线视频| 欧美淫乱视频| 嫩草 我啊~嗯~在线| 99黄页网站| 自拍视频大全亚洲专媒视频/一区二区三区 | 青青久日| 黑白配性爱AV成| 婷婷激情五月综合| 亚洲熟女乱综合一区二区在线-...亚洲国产日韩欧美一区二区三区,久久久久久精 | 色色色色网站| 精品国产一级久久| 一级性爱啪啪视频| 亚洲av成人精品一区| 热热色色综合| 九九九网页| 亚洲。日韩。欧美| 成人日韩中文字幕| 亚洲综合小视频小说在线观看 | 岛国网址国产| 亚洲欧美经典一区二区| 99热66| 情色AV电影| 久久久蜜桃一区二区三区| 亚洲成人一区二区精品| 婷婷六月色开| 九九久久九九久久| 亚洲黄网在哪免费看| 在线观看成人性爱免费小视频| 亚洲AV麻豆Aⅴ无码电影一 | 999九九九九国产动| 黄网站黄视频网站进入口| oumeisetu综合| 亚洲棕合电彰| 男人天堂最新手机版在线青青草| 久草精品视频| 91性片| 懂色aV一区二区天美传媒| 亚洲一区二区三区在线激情| 欧美十八禁导航成人| 六月色色| 精品久久久久9999| 91真人天天在线| 亚洲精品成人动漫在线| 蜜乳AV.COM| 一区二区影院| 久久久国产成人一区二区三区在线| 九九碰九九爱97| 五十路二区在线| 人妻少妇精品| 国产精品老师| 十八禁黄色成人网站观看| 后入福利视频| 26uuu性| 日韩三级一区| 欧美91精彩| 啊啊啊好大好深| 亚洲欧洲成人在线电影| 无码人妻丰满热妇又大又粗| 欧美高清91| 精品一区二区在线针对华人免费观看这里只有精品免费观看 | 草草电影院| 亚洲 欧美 手机在线观看| 日本99久久| 色婷婷久久综合超碰| 精品免费囯产一区二区三区| 国产高清免费不卡av| 人妻天天爽夜夜爽爽| 东北老女人的激情视频| 九九热精品在线| 91丨九色丨东北熟女| 91久久18禁| 偷拍盗拍亚洲色图图片| 国产亚洲日本精品在线| 欧美五区| 久久久久亚洲| 日本在线不卡123| 啊啊啊好想要| 91精品人妻一区二区-全集完整版免费正片国语-B02AV | 最新三级网址| 最新9久久久9免费视频| 国产精品99精品视频网站| 三级精品三级在线观看| 超碰在线人妻中文字幕| 韩国三级三级BD在线| 中文字幕美女91| 麻豆伊人网| 色视频蜜乳| 色综合五月天| 亚洲av无码国产精品字幕| 九九九久千久久激情蜜桃在线看 | 樱花草社区www中国| 午夜欧美女人操逼| 亚洲九九视频| 色色婷婷五月天| 少妇淫妇久久久久久久| 夜夜操二区| 国产精品4p在线观看| 麻豆人妻少妇在线免费观看| 日本操嫩b网| 亚洲做性| 顶级少妇BT天堂| 欧美日韩免费性爱| 久久大香蕉97| 操久久久久久| 91精品亚洲内射孕妇| 欧美综合在线91| 亚洲人妻在线一区| 人人超碰在线观看黄| 一级毛片久久久久久久女人18| 青青青艹在线视频| 91国产精品在线看| 国产精品久久久777| 最新三级网址| 国产性爱在线视频一区二区| 诱惑网综合| 久久成人午夜狠狠| 嗯嗯啊好大| 亚洲国产精品久久久久婷婷青年| 最新国产精品久久精品| 青娱乐老司机视频| 后入式免费视频| 97伦综合| 久久蜜桃一区二区| com 首页 18岁 禁区 女优 免费 精选 同城 | 黄色片A级一区二区三区| 久久日韩肥臀| 亚洲清纯唯美| 四虎在线免费视频| 日韩中文字幕av在线播放| 开心激情站| 啊视频在线| www.黄色在线| 天天干干天天干干| 风流老熟女一区二区三区l| 日日操免费视频| 蜜臀久久99精品久久久久| 俺去啦自拍| 欧美性天天影院| 求求你操操我| 中文字幕精品人妻丝袜| 中文字幕成人| 三级特黄60分钟播放| 999精品乱码| 久久国产AⅤ| 伊人黄色片| 亚洲1区2区三区高清中文字幕| 2019精品国产无码成人| 日韩无码a片| 天美麻花大全视频| 日韩99999色| 5252色欧美在线| 国产精品久久久久久久久久久久久久久久 | 综合网91| 久久久久99999| 亚洲久9| 天啪| 凹凸视频在线一区二区| 麻花豆传媒剧国产MV出差| 久久香蕉影院| 五月开心久久AV官网| 蜜臀网 一区| 性爱乱伦视频免费| 天天综合精品| 伊人96在线| 亚洲欧洲av影音| 日韩啪啪视频| 二级久久网| 午夜精品久久久| 免费精品人妻一区二区三| 丁香激情网| 欧美激情精品久久久| 亚洲天堂欧美| 日韩人妻一区二区精品| 日韩性色b| 91处女视频在线观看| 久久超碰天天| 婷婷激情综合网| 91人人看| 一本色道人妻久久| 手机在线看片免费人成视频| 91总综合网| 热99这里有精品综合久久| 五月天激情影院| 内射中国少妇高清视频免费视频| 综合97| 国产精品亚洲天堂网址| 久久久艹艹艹| 欧美日韩亚洲少妇寂寞影院正在播放| 2021国产成人精品久久| 去干网最新版| 91精品免费| 日韩一级久久毛片| 久久综合婷婷| 欧美中字不卡| 最新日日夜夜天天干干| 久久98| 99热99re6国产在线播放| 国产精品视频自拍在线| 亚洲精品骚逼| 伊人久久综合影院| 嫩草 我啊~嗯~在线| 亚洲精品官网在线观看| 91日韩网站| 看日韩美女二区三区免费操逼视频| 999国产精品999久久久久久| 九色PORNY9l原创自拍| 2017天天拍大香蕉| 中文字幕十五区| 欧美性爱视频免费一区一A| 青青草在线成人视频| 中英熟女操女| 天天天天做夜夜夜夜做| 国产精品蜜乳AV| 人人操人人肉久久精品| 97资源欧美| av天堂手机版追回| 久久精品熟妇丰满人妻99| 欧美黄色图片| 国产成人午夜视频网址| 婷婷人妻激情| 欧美在线视频播放| 人妻熟女午夜精品在线| 亚欧免费| 日本欧美不卡| 91最新综合| 91欧美亚洲| 亚洲日韩少妇一道本视频| 九九香蕉网| 内射夫妻三片| 99夜夜操| 2020中文字幕在线| 天天综合网一91网| 国产第25页在线观看| 久久69| 国产精品一二三| 九一综合精品视品av| 日韩不卡a级视频专区| 亚洲一区二区在线观看91| 91久久堂| 国产乱码久久| 青草青草久热| 日本影视久久免费| 亚洲日本加勒比在线| 91丝袜美女| 在线观看高清AV| 永久免费观看的毛片的网站| 亚洲图片视频小说| 91n.欧美| 嗯嗯啊好大| 97超碰美国| 亚洲欧美成人在线| 国产毛片片精品天天看视频| 女同性恋中文字幕| 二对二中文字幕。| 91亚·色| 国产欧美一区激情交| 国内毛片无遮挡国产| 全国男人天堂网| 久久春色| 岛国福利在线精品播放| 欧美激情另类一区二区| 人人人人插| 日韩性爱电影一区| 99久久久久久久久| 亚洲操逼网| 精品国产自在在线99| 一区中文字幕二区日韩| 精品九九九九九九九九九| 人妻内射一区二区在线视频| 久久精品成人一区二区三区蜜臀| 青青草精品| 韩国一区二区精品亚洲| 国产亚卅97| 桃色人妻在线视频| 亚洲交换| 婷婷探花久久精品一区| 東南亚性呦成人伦理资源在线视频| 熟妇色99| 国产精品96| 亚洲日韩人妻中文字幕一区| 亚洲无线观看久久| 亚洲图片欧美| 中文AV制服乱伦| 八戒午夜福利理论片| www.大香| 久久久久久久久久久人妻| 国产精品九9| 亚州欧美一区| 九九九九精品| 亚洲1区2区三区高清中文字幕| 香港久久久| 豆花视频操逼网址| 久久婷婷伊人| 岛国不卡超碰护士AV在线播放| 少妇的嫩逼图片| www亚洲免费| 插入综合网| 97色婷婷| 91欧美另类| 欧中美三级一区二区三区| 91搡老女人老妇女老熟女歌词翻译| 91国产操逼视频| 99久久久久久久久| 大鸡吧尹人在线| 青青草AV色| 亚洲久久久久| 717影院理论午夜伦八戒| 四虎884a| 天天操夜夜操狠很操| 男人的天堂在线2| 欧美高清18A片| 日韩欧美国产高清视频| 97一区二区三区视频| av毛片aaaaa免费看| 精品国产乱码久久久久久久久1 | 精品一二三区四视频| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区 | 操一区| 香蕉免费一区二区三区不读| 亚洲风情在线观看| 精品人妻伦一二三区久久| 91精品国产乱码| 8050无码八戒| 一本色道久久综合亚洲二区三区| 亚洲天堂AV在线播放| 久久久久亚洲三级电影| 97在线精品| 日日骚一区二区三区| 色操逼网| 色女网日韩| 国产女大学生AV| 亚洲人成色9999精品久久| 色99999| 国产999精品久久久| 亚洲欧美国产中文视频| 久草精品国产蜜臀| 97天天综合| 亚州操操穴网| 欧美日韩国产成人高清| http://qxhbdz.com| 99热在线播放| 高清无码在线播放网站| 欧洲精品一二三在线| 8050午夜少妇无码| 久久精品电影在线| 日韩欧美亚洲国产日韩| 亚洲欧美一区二区网址| 国产美女精品| 九九色综合| 无码不卡八戒| 婷婷10月天青娱乐| 啊啊啊com| 九九九热| 嗯嗯啊啊日韩精品| 色综合久| 精品人妻一区二区视频| 国产白丝AV| 亚洲999综合| 六六久久日韩不卡| 日本激情免费大片| 99无码| 内射黑人| 亚 欧 美 综合| 久久成人午夜精品影院| 97资源久久| 亚洲揄拍网| 99久久婷婷| 欧美天天| 九九自拍伦理| 免费看污网站| 欧美色三级片91| 玖玖婷婷五月天| 成人七区| 伊人专区一区二区三区| 伊人天天久久动态图| 欧美亚洲综合高清在线| 亚洲色图日韩丝袜制服一区二区五月在线| 曰本精品久久久| 色五月天AV| 欧美日韩国产电影| 天天α片| 91色伦综合| 丝袜综合| 五十路二区在线| 91精品人妻一区二区三区蜜桃臀| 欧美九九爱| 99re3这里只有精品| 偷拍欧美激情| 欧美日韩黄色片一区二区三区四区人与兽做爱 | 五月天色图| 国产精品秘 福利姬在线观看| 日操粉逼逼| 日韩无码人妻| 波多野结衣之双飞调教在线播放| 欧美不在线| rion磁力链接| 欧美性爱一区二区三区| 久久久久国色αv免费观看| 91老妇女| 青青草综合在线| 白嫩妹子国产骚| 蜜臀99久久精品| 97久久国产| 91精品91久久久中77777| 收看日本人日bb| 天天草天天干天天日| 国产67194| 欧美日韩性感| 欲色影视综合吧| 十八禁一区二区无码观看| 亚洲操操操无码| 夜夜爽夜夜操| 97精品一区二区视频| 都市久久精品激情亚洲| 高潮的A片激情扒开一区| 综合欧美激情网| 激情久久久| 噜噜噜无码AV一级一级久久影院| 日本一本道A级黄色毛片试看60分钟| 中文字幕精品一区二| 欧美后进式| 9精品久久久久| 精品性爱一区二区| 96精品在线| 国产精品ⅴ无码大片在线看.| 在线综合色| 日韩精品熟妇| 亚洲诱惑天堂| 精品国产a∨一区天美传媒| 免费的黄片有限公司| 91 亚洲 欧洲| 亚洲欧美清纯| 超碰人人色| 色五月AV在线| 久草视频在线视频在线视频在线观看| 熟妇女人妻呻吟久久AV| 爱逼综合| 尤物av网站| 日本亚欧爱爱| 日本久久精品| 超碰97COm中文| 日韩三级在线观看网站| 97亚洲一区| 色欲久久久久综合网| 婷婷在线播放| 狠久久| 亚洲中文字幕av| 亚洲s色图| 色哟哟511老熟女| 欧美日韩国产人人| 亚洲砖码砖专无区2023| 激情综合网一盗摄| 国产精点久久久成人| 久久影视二区三区行押| 免费人成?大片在线播放| 伊人性在线视频| 天天天天干| 91综合网站| 混色激情av| 思思热国产高清| 亚洲午夜免费狠狠干| 大香蕉综合在线| 蜜乳AV色欲AVAV无码| 性色综合网| 麻豆亚洲Av成人无码一区精品| 中国熟女91| 婷婷AV一区二区三区| 激情四射五月天| 国产精品久久久无码AV网站| 极品出轨视频网站| n1038 一二三区| 国产在线精品偷| 欧美成人都市人妻| 强奸乱伦Av网| 涩五月婷婷| 精品少妇一区二区三区| 亚洲精品国产熟女久久久久久| 亚州情色j区| 69一区二区三区| 国产黄a三级三级三级av在线看| 欧美精品黑人猛交高潮| 天堂岛av| 久久老女人| 久久久蜜桃一区二区三区| 久久久久少妇| 欧洲中文字幕| 男女猛烈无遮掩视频免费软件| 中文字幕天天天天天| 18禁在线视频| 91久久久老司机| 91国产操逼视频| 欧美大香蕉97| 香蕉久久AⅤ...| 超碰伊人在线| 国产亚洲精品美女久久久m| 青青草中日韩在线| 日韩一级片| 98超碰日本| 精品国产片亚洲一区| 夜夜欧美 | 日本αv| 精品91摸| 日韩欧美性吧婷婷乱伦大香蕉| 四虎视频在线观看| 久久九九国产精品| 97鸡把在线视频| 亚洲精品久| 免费1级a做爰片观看| 一本大道综合伊人精品热热| 影音先锋每日最新资源在线观看| 中文字幕AV片| 久精品无码av一区二免费国产在线观看| 清纯唯美亚洲另类| 国产suv精品一区二区四| 亚洲无码国产精品久久| 99re在线精品78| 日本日皮视频逼| 2017亚洲天堂| 亚州久久9| 毛片电影一区二区三区| w w w.久久精品| 国产偷仑| 亚欧高清| 国产不卡的视频| 亚洲天堂男人在线| 97色网| 熟妇激情| 天天综合~91入口| 久草视频在线视频在线视频在线观看| 9I1性色影院| 97精品久久久久久久| 亚洲aV无码成人在线观看| 水滴偷拍| 熟妇高潮一区二区免费视频| 日韩精品碰碰| 亚洲一区二区av| 久久中日麻豆| 日日夜夜狠狠| 无码久久亚洲高清,| 欧美日日人人天天| 日本九九久久99播| 在线欧美69V免费观看视频| 熟女91网站| 偷拍在线观看视频| 日本精品一区三区| 国岛片视频| yw尤物av无码点击进入麻豆| 嗯嗯啊啊用力视频免费| 亚洲AV秘 精品久久老牛影视| 国产99热| 亚洲一区制服诱惑| 啊…啊…操我用力操我| 无码精品久久| 不卡视频一区蜜桃视频| 欧美91网站| 五月天激情网站| 国产h片在线观看视频| 神马久久午夜| 2003天天干夜夜操| 国产丰满少妇久久久精品影院| 性欧美另类高清| 男人的天堂一区三区| 在线免费观看日韩一区| 麻豆天天躁天天揉揉AV| 五月天综合| 激情久久久| 午夜激情成人在线观看| 青青操网| 青操影院| 97er欧美性| 超碰97资源大奶| 日韩精品一二三四| 女人爽到高潮潮喷18禁网站| 国产成年精品高清在线观看91| 97欧美视频| 麻豆精品.欧美精品.日韩精品.| 男人成人黄色视频在线观看免费下载| 亚洲性爱高潮影院| 国产亚洲综合欧美一区| 久久精品国产亚洲AV片多多| 亚洲色图综合| 熟女91网站| 综合亚洲欧美| 天天欧美97| 人妻 制服 日韩 中文 在线| 亚州操操穴网| 女人的久久久| 五月天激情婷婷| 涩涩这里只有精品视频| 国产美女口爆吞精视频| 天天干人人看综合| 青青草公开在线免费不卡视频| Julia Annxxxxx| 伊人四虎综合| 东京热大香焦| 久久久久密臀一区二区| 毛片17S| 18一区二区三区| 国产蜜臀精品一区免费尤物| 国产一区二区啪啪视频| 亚欧性爱ab| aaaa黄片| 亚洲砖码砖专无区2023| 91在线精品| www.丁香五月| 一起草AV| 婷婷丁香六月| 五月丁香影院| 日韩乱插| 色婷婷在线视频| 超碰国产在线| 婷婷五月丁香五月| 久久色人体 | se吧提供国产乱老熟视频胖女人| 午夜性刺激视频免费观看| 色悠久| 日韩精品在线视频,日韩精品……| 中文字幕一区二区视频在线观看| 久久久久国产精品久久久| www.91视频网| 青青草影视蜜久久| 蜜桃视频一区二区三区在线观看| 国产精品天美传媒| 日韩一999精品| 国产美女口爆吞精| 美国三级日本三级久久99| 亚洲人精品久久久| 蜜臀在线网站| 男人夜色天堂ss| 人妻色偷色噜| 人妻精品综合中文字幕在线| 日本操色导航| 淫纸中9区| a v网站在线播放| 综合网 欧美| 宗合情欲网| 久久女婷| 国产 v乱码一区二| 久久99草| 日本天堂在线播放| 97超碰大| 日韩性爱小视频| 亚洲不卡三级手机播放| 91精品婷婷国产综合久久| 国产精品久久久久久夜夜夜夜| 999色欧美中文字幕| 成人羞羞视频国产| 国产日韩欧美中文在线播放| 天天色黄色影院天天操| 欧美成人性爱视频大全| 久久国产视频专区一二三 | 欧美亚洲日本视频久久久| 97婷婷色| 国产福利夜| 97精品一区| 黄色视频高清无码网站| 伦激情人妻另类人妻| 亚洲天堂无码| 人人干人人搞人人摸| 理论久久婷婷网 8| 加勒比大香蕉视频在线| 国产精品亚洲四五区在线观看| 国产中文日韩欧美一区二区三区人妻丝袜美腿| 91丨九色丨东北熟女| 家庭乱伦国产| 九九色影院| 97天天摸天天碰| 爽爽淫人网| 精品中文一区二区| 综合色久欲| 国产三级中文字幕粉嫩| 人人摸人人舔一区二区| 亚洲第一免费视频| 一区在线精品中文字幕| 啊啊啊啊啊啊在线| 久久免费9| 97免费视频在线| 午夜欧美精品久久久| 欧美东京热青青草| 久久久久久久9999| 亚洲少妇视频| 欧美天天综合网版| 国语对白露脸XXXXXX| 亚州色图欧美色图| 国产中出内射一区二区| 性在久久久久久| 色婷婷激情| 欧美狠狠操| 综合亚洲欧美| 日本天天操| 亚洲综合码| 五月天欧美色图| 日韩熟女操逼| 午夜欧美女人操逼| 色色99| 日韩少妇无码| 亚洲AV成人无码一区二区三区在线观看| 青青草吊丝| 久久久久久久性爱| 午夜福利一区二区影院| 大香蕉五月天婷婷| 在线小视频|