精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

為什么要理解類加載?遇到這種問題就知道書到用時方恨少了

數據庫 MySQL
究竟是哪一行呢?本地可以調試的話很簡單,Debug跟蹤一下,但是預發布環境不能Debug呀!當然其實有些公司網是通的,可以做遠程Debug,更多的是一個規范的問題。

1、問題背景

我們項目中引入了sharding-jdbc,本機運行、開發環境運行、測試環境運行都沒有問題,結果到了預發布環境發生了一個異常:

Cannot support database type 'MySQL' at org.apache.shardingsphere.sql.parser.core.parser.SQLParserFactory.newInstance(SQLParserFactory.java:55) 
at org.apache.shardingsphere.sql.parser.core.parser.SQLParserExecutor.towPhaseParse(SQLParserExecutor.java:55) 
at org.apache.shardingsphere.sql.parser.core.parser.SQLParserExecutor.execute(SQLParserExecutor.java:47) 
at org.apache.shardingsphere.sql.parser.SQLParserEngine.parse0(SQLParserEngine.java:79) 
at org.apache.shardingsphere.sql.parser.SQLParserEngine.parse(SQLParserEngine.java:61) 
at org.apache.shardingsphere.underlying.route.DataNodeRouter.createRouteContext(DataNodeRouter.java:97) 
at org.apache.shardingsphere.underlying.route.DataNodeRouter.executeRoute(DataNodeRouter.java:89) 
at org.apache.shardingsphere.underlying.route.DataNodeRouter.route(DataNodeRouter.java:76) 
at org.apache.shardingsphere.underlying.pluggble.prepare.PreparedQueryPrepareEngine.route(PreparedQueryPrepareEngine.java:54)

而我們除了本機環境各人使用上有些差異外,開發環境運行、測試環境運行和預發布環境上只有MySQL服務端版本是不同的,雖然是報錯上看和MySQL服務端并沒有直接關系,但我們還是在開發環境還原了預發布環境的MySQL服務端版本,還原之后開發環境并沒有復現問題。

這就非常詭異了。也給我們解決帶來了一定的技術挑戰:不能通過本地調試或者加JVM參數來做進一步驗證。

以下就是我們的排查過程。

2、源碼分析

既然有明確的報錯日志,首先要進行代碼分析:

SQLParserFactory.newInstance(SQLParserFactory.java:55)

跟進這一行報錯的源碼:

public static SQLParser newInstance(final String databaseTypeName, final String sql) {
      for (SQLParserConfiguration each : NewInstanceServiceLoader.newServiceInstances(SQLParserConfiguration.class)) {
          if (each.getDatabaseTypeName().equals(databaseTypeName)) {
              return createSQLParser(sql, each);
          }
      }
      throw new UnsupportedOperationException(String.format("Cannot support database type '%s'", databaseTypeName));
  }

第7行拋出了日志中的異常。這說明問題就發生在2、3、4這三行中的一行。

究竟是哪一行呢?本地可以調試的話很簡單,Debug跟蹤一下,但是預發布環境不能Debug呀!當然其實有些公司網是通的,可以做遠程Debug,更多的是一個規范的問題。

在不能Debug的前提下,我把這三行代碼拷貝出來,分步打日志,再放到預發布環境運行:

try{
    log.warn("ShardingDebug test=1==============================begin");
    for (SQLParserConfiguration each : NewInstanceServiceLoader.newServiceInstances(SQLParserConfiguration.class)) {
        log.warn("ShardingDebug test=2==============================each:{}", each);
        if (each.getDatabaseTypeName().equals("MySQL")) {
            log.warn("ShardingDebug test=3==============================equals:{}", each);
            CodePointCharStream codePointCharStream = CharStreams.fromString("select version()");
            log.warn("ShardingDebug test=4==============================codePointCharStream:{}", codePointCharStream);
            // 這次存在
            Lexer lexer = null;
            try {
                log.warn("ShardingDebug test=5.0==============================MySQLLexer:{}", each.getLexerClass().getName());
                log.warn("ShardingDebug test=5.1==============================MySQLLexer:{}", each.getLexerClass().getConstructor(CharStream.class).getName());
                SQLLexer sqlLexer = each.getLexerClass().getConstructor(CharStream.class).newInstance(codePointCharStream);
                log.warn("ShardingDebug test=5.2==============================sqlLexer:{}, isInstance:{}", sqlLexer, sqlLexer instanceof Lexer);
                lexer = (Lexer) each.getLexerClass().getConstructor(CharStream.class).newInstance(codePointCharStream);
                log.warn("ShardingDebug test=5==============================lexer:{}", lexer);
            } catch (InstantiationException e) {
                log.error("ShardingDebug test=6==============================lexer:{}", lexer, e);
            } catch (IllegalAccessException e) {
                log.error("ShardingDebug test=7==============================lexer:{}", lexer, e);
            } catch (InvocationTargetException e) {
                log.error("ShardingDebug test=8==============================lexer:{}", lexer, e);
            } catch (NoSuchMethodException e) {
                log.error("ShardingDebug test=9==============================lexer:{}", lexer, e);
            }
            CommonTokenStream lexerCommonTokenStream = new CommonTokenStream(lexer);
            log.warn("ShardingDebug test=10==============================lexerCommonTokenStream:{}", lexerCommonTokenStream);
            SQLParser sqlParser = null;
            try {
                log.warn("ShardingDebug test=11.0==============================sqlParser:{}", each.getParserClass());
                log.warn("ShardingDebug test=11.1==============================sqlParser:{}", each.getParserClass().getConstructor(TokenStream.class));
                sqlParser = each.getParserClass().getConstructor(TokenStream.class).newInstance(lexerCommonTokenStream);
                log.warn("ShardingDebug test=11==============================sqlParser:{}", sqlParser);
            } catch (InstantiationException e) {
                log.warn("ShardingDebug test=12==============================sqlParser:{}", sqlParser, e);
            } catch (IllegalAccessException e) {
                log.warn("ShardingDebug test=13==============================sqlParser:{}", sqlParser, e);
            } catch (InvocationTargetException e) {
                log.warn("ShardingDebug test=14==============================sqlParser:{}", sqlParser, e);
            } catch (NoSuchMethodException e) {
                log.warn("ShardingDebug test=15==============================sqlParser:{}", sqlParser, e);
            }
            break;
        }
    }
} catch (Exception ex) {
    log.error("ShardDebugJob failed", ex);
}
}

我把這三行代碼拆解的非常細,希望盡量減少發布,排查出問題的原因。

結果日志只打印了第一行,剩下的都沒打印。說明沒有進入for循環。也就說明了。

NewInstanceServiceLoader.newServiceInstances(SQLParserConfiguration.class)

沒有加載到東西。再看這一行的源碼:

public static <T> Collection<T> newServiceInstances(final Class<T> service) {
      Collection<T> result = new LinkedList<>();
      if (null == SERVICE_MAP.get(service)) {
          return result;
      }
      for (Class<?> each : SERVICE_MAP.get(service)) {
          result.add((T) each.newInstance());
      }
      return result;
  }

這說明SERVICE_MAP里沒有對應的實現類。再看SERVICE_MAP賦值的源碼:

public static <T> void register(final Class<T> service) {
    for (T each : ServiceLoader.load(service)) {
        registerServiceClass(service, each);
    }
}


private static <T> void registerServiceClass(final Class<T> service, final T instance) {
    Collection<Class<?>> serviceClasses = SERVICE_MAP.get(service);
    if (null == serviceClasses) {
        serviceClasses = new LinkedHashSet<>();
    }
    serviceClasses.add(instance.getClass());
    SERVICE_MAP.put(service, serviceClasses);
}

本質上值都是ServiceLoader.load(service)加載來的。這就要考察Java功力了。

這行代碼本質是什么呢?

3、原理分析

本質是使用了Java的SPI功能。

Java SPI(Service Provider Interface)是一種服務發現機制,它允許服務提供者為API定義標準接口,而實現者可以通過配置文件來注冊自己的實現。如果在使用SPI時出現“java SPI沒有加載到實現類”的錯誤,通常意味著以下幾種情況之一:

  • 實現類沒有正確地被打包到jar中,或者沒有被放置在正確的目錄下。
  • 配置文件(通常是META-INF/services/接口全限定名)中沒有列出實現類的全限定名。
  • 類加載器沒有正確加載到實現類的路徑。

解決方法:

  • 確保實現類的jar包已經被正確打包,并且實現類的包結構和接口包結構一致。
  • 檢查META-INF/services目錄下對應接口的文件中是否有實現類的全限定名。
  • 如果是在web容器或者OSGi環境中,確保類加載器的路徑設置正確,實現類應該可見。
  • 如果使用的是第三方庫,確保依賴已經正確引入。
  • 清除可能存在的緩存,比如重新編譯或重啟應用。

這次的問題是屬于哪一種呢?很遺憾,都不是。我為了確認問題,將預發布環境打的運行jar包下載到本地,解壓查看確認,都是沒有問題的。

為了確認可以加載到,我再一次發布預發布環境,這一次手動執行加載看看:

Class<?> mySQLParserConfiguration = Thread.currentThread().getContextClassLoader().loadClass(MySQLParserConfiguration.class.getName());
log.info("ShardingDebug test=0.0==============================loadClass:{}", mySQLParserConfiguration);

結果正常打印了實現類的全限定名。

這里為什么我會想到Thread.currentThread().getContextClassLoader()這個類加載器呢?很簡單。這個類加載器就是ServiceLoader.load源碼里使用的類加載器。

@CallerSensitive
public static <S> ServiceLoader<S> load(Class<S> service) {
    ClassLoader cl = Thread.currentThread().getContextClassLoader();
    return new ServiceLoader<>(Reflection.getCallerClass(), service, cl);
}

4、問題解決

到這里,解決方案也呼之欲出:既然是可以加載到的,那應該就是沒有在注冊服務代碼執行前加載。手動讓類加載在注冊服務前運行即可。

Class<?> mySQLParserConfiguration = Thread.currentThread().getContextClassLoader().loadClass(MySQLParserConfiguration.class.getName());
log.info("ShardingDebug test=0.0==============================loadClass:{}", mySQLParserConfiguration);
try {
    NewInstanceServiceLoader.register(SQLParserConfiguration.class);
} catch (Throwable e) {
    log.error("ShardingDebug test=0.011==============================register", e);
}

先執行這個,再執行最初的:

NewInstanceServiceLoader.newServiceInstances(SQLParserConfiguration.class)

就可以加載到對應的實例了。

4、分析總結

這次問題出現在sharding-jdbc的SQL解析階段,可以通過源碼上下文看到問題發生在與MySQL服務端交互之前,可排除受服務端的影響。并且可以確定問題發生在JVM內部。

可通過ServiceLoader.load(service)確定是使用了Java的SPI機制時發生問題。SPI的本質是通過META-INF/services目錄下對應接口的文件找到實現類。

驗證實現類可被JVM正常加載我使用了與源碼相同的類加載器并發布到預發布環境進行驗證。因為不同類加載器有不同的使用條件。比如:

ClassLoader.getSystemClassLoader()
在本機會正常運行,但是服務器上會因為運行的是打好的 jar 包,路徑發生變化,服務器上運行報「找不到類」異常。

整個排查過程也有一些怎樣搜索答案的思考,比如只是根據最初的異常來搜索,發現網上搜的都不是本質問題。后來雖然我用更接近本質的問題:

「找不到spi的實現類怎么解決」也沒找到正確的答案,但是問題是更接近真相的。
責任編輯:武曉燕 來源: 編程一生
相關推薦

2021-04-21 07:37:19

JVM復盤 日志

2024-04-25 08:21:36

Java對象計數法

2017-07-27 11:15:24

云存儲攝像機SD卡

2023-09-28 10:21:44

CSS前端

2018-09-28 09:20:56

輸入法

2024-12-02 09:01:23

Java虛擬機內存

2019-05-16 08:10:42

無線路由器WiFi網絡

2011-04-25 09:37:03

2020-05-07 10:44:05

MySQL數據庫程序員

2021-09-05 07:55:36

DDIA Raft 場景

2015-08-06 10:14:15

造輪子facebook

2022-08-15 08:27:02

基站網絡

2013-03-12 14:30:09

Ubuntu操作系統

2024-04-03 09:23:31

ES索引分析器

2018-06-21 09:30:50

比特幣區塊鏈擴容

2010-07-13 10:56:43

Perl print

2021-08-31 07:57:21

輪詢鎖多線編程Java

2021-02-11 13:30:56

Nodejs源碼c++

2019-11-27 10:25:15

SaaS云端IT架構

2024-10-17 16:41:57

KafkaZooKeeper
點贊
收藏

51CTO技術棧公眾號

奇米影视一区二区三区| 欧美大片网站| 不卡一区二区三区四区| 欧美在线激情视频| 亚洲午夜久久久久久久国产| 国产极品久久久久久久久波多结野| 国产精品传媒在线| 精品国产乱码久久久久久88av| 无码人妻av免费一区二区三区| 清纯唯美日韩| 精品国产青草久久久久福利| 亚洲 中文字幕 日韩 无码| 97caopor国产在线视频| 久久免费国产精品| 99精品国产一区二区| 亚洲永久精品一区| 亚洲无毛电影| 日韩在线免费视频| 波多野结衣视频播放| 欧美亚洲黄色| 色香蕉久久蜜桃| 久久亚洲a v| 在线免费看黄网站| 国产九色精品成人porny | 国产不卡人人| 亚洲免费观看视频| 色综合666| 午夜视频免费看| 国产精品亚洲第一区在线暖暖韩国 | 欧美精品一卡两卡| 能看的毛片网站| 日韩在线伦理| 亚洲二区视频在线| 青青草原网站在线观看| 在线观看麻豆| 欧美韩国日本综合| 欧美日韩在线精品一区二区三区| 黄色一级大片在线免费看国产| 精品一区二区三区不卡| 国产精品久久久久久久久久小说| 亚洲欧美在线观看视频| 欧美午夜a级限制福利片| www国产亚洲精品久久网站| 黄免费在线观看| 男男gay无套免费视频欧美| 亚洲国产一区二区三区四区| 人妻精油按摩bd高清中文字幕| 日韩精品一级毛片在线播放| 欧美日韩三级在线| 国产精品乱码久久久久| 日韩欧美精品电影| 在线视频综合导航| 少妇激情一区二区三区| 欧美日韩大片| 欧美性videosxxxxx| 看欧美ab黄色大片视频免费| 亚洲第一会所| 欧美性一二三区| www.这里只有精品| 欧美jizz18| 欧美一级午夜免费电影| japan高清日本乱xxxxx| 综合中文字幕| 亚洲国产精品中文| 91中文字幕永久在线| 国产99精品| 自拍亚洲一区欧美另类| 在线日韩国产网站| 欧美精品导航| 亚洲精品电影| 亚洲欧美在线免费观看| 偷拍夫妻性生活| 欧美在线电影| 久久九九亚洲综合| 久久黄色小视频| 国产模特精品视频久久久久| 国产不卡在线观看| 一级特黄aaa| 国产一区日韩二区欧美三区| 粉嫩av免费一区二区三区| 风流老熟女一区二区三区| 91麻豆产精品久久久久久 | 欧美色18zzzzxxxxx| 美日韩黄色大片| 日韩av在线影院| 亚洲欧洲久久久| 中文字幕免费一区二区三区| 午夜精品久久久久久久久久久久| 日韩在线视频不卡| 激情伊人五月天久久综合| 国产91精品入口17c| 欧美孕妇孕交| 亚洲精品你懂的| 成人免费观看cn| 国产毛片精品久久| 亚洲电影成人av99爱色| 手机看片福利视频| 欧美日本免费| 国产精品久久久久久久久久免费| 91av久久久| 99精品视频在线观看免费| 香蕉久久免费影视| 美女网站在线看| 在线播放一区二区三区| 国产人妻一区二区| 欧美黄色一级视频| 国产精品电影网| 天堂在线观看av| 亚洲视频一区在线| 亚洲精品乱码久久久久久自慰| 国产精品久久久久久久久久辛辛| 亚洲精品中文字| 精品爆乳一区二区三区无码av| 久久综合影音| 国产中文一区二区| av免费在线网站| 欧美在线免费观看亚洲| 三叶草欧洲码在线| 午夜国产欧美理论在线播放| 国产精品欧美激情| 欧美成人欧美edvon| 国产成人亚洲欧美| 国产亚洲依依| 偷拍日韩校园综合在线| 91视频最新| 你懂的在线观看| 亚洲激情在线播放| 777视频在线| 久久91麻豆精品一区| 欧美精品aaa| 国产乱淫a∨片免费观看| 亚洲欧洲国产精品一区| 亚洲国产99精品国自产| 69夜色精品国产69乱| 久久天天综合| 久久艳妇乳肉豪妇荡乳av| 欧美一卡二卡| 日韩你懂的在线播放| 亚洲一区电影在线观看| 日本不卡一区二区| 日本精品二区| 欧美一级大片在线观看| 亚洲精品一区二区18漫画| 成人中文视频| 国产精品96久久久久久又黄又硬| 天天摸天天干天天操| 亚洲综合自拍偷拍| 日韩 国产 一区| 国产黄a三级三级三级| 成人国产一区二区三区精品| 国产乱子伦精品无码专区| 国产免费av国片精品草莓男男 | 五月婷婷在线播放| 亚洲午夜精品在线| 亚洲av成人精品一区二区三区| 韩国av一区| 国产精品免费一区二区三区四区| 国产精品探花在线| 精品国产91洋老外米糕| 久久一二三四区| 成人av在线一区二区| 男女视频网站在线观看| 天堂成人娱乐在线视频免费播放网站| 91av视频导航| 美女欧美视频在线观看免费| 在线免费视频一区二区| 欧美人与禽zoz0善交| 美女网站色91| 欧美一级特黄aaaaaa在线看片| 欧美1区2区3| 97超碰国产精品女人人人爽| 天堂а在线中文在线无限看推荐| 91久久线看在观草草青青| 黄色av片三级三级三级免费看| 日韩精品视频中文字幕| 久久999免费视频| 熟妇高潮一区二区三区| 色婷婷综合视频在线观看| 国产黄色录像视频| 国产美女av一区二区三区| 国产色一区二区三区| 美女网站一区| 成人网址在线观看| 97天天综合网| 在线精品国产成人综合| 国产福利小视频| 色综合中文综合网| 天天爽天天爽天天爽| 成人精品小蝌蚪| 波多野结衣天堂| 国产精品分类| 婷婷四房综合激情五月| 美女精品视频在线| 国产91精品久| 黄色一级大片在线免费看产| 亚洲精品国产suv| 亚洲一卡二卡在线观看| 精品国产91乱高清在线观看 | 亚洲欧美电影一区二区| www.88av| 国产精品自拍毛片| 18岁视频在线观看| 亚洲成人最新网站| 欧美性bbwbbwbbwhd| 日本高清精品| 国产精品99久久久久久人| 国产精品一卡二卡三卡| 亚洲人精选亚洲人成在线| www.午夜激情| 精品视频一区三区九区| 国产无遮挡又黄又爽| 国产精品久久久久国产精品日日| 艳妇乳肉亭妇荡乳av| 国产精品亚洲专一区二区三区| 91色国产在线| 午夜亚洲性色福利视频| 成人国产在线看| 久久精品高清| 2023亚洲男人天堂| a级毛片免费观看在线| 国产一区二区日韩精品欧美精品| 好吊色一区二区| 欧美放荡的少妇| 一区二区三区麻豆| 欧美日韩一区二区精品| 久久亚洲AV无码| 亚洲丝袜制服诱惑| 性少妇xx生活| 国产日韩欧美一区二区三区乱码 | 91麻豆精品在线观看| 亚洲麻豆一区二区三区| 国产精品99久久久久久似苏梦涵| 亚洲免费av一区| 奇米888四色在线精品| 中国丰满人妻videoshd| 悠悠资源网久久精品| 超碰超碰超碰超碰超碰| 91精品国产福利在线观看麻豆| 日本在线视频一区| 久久av综合| 欧美日韩一区二区三| 亚洲综合图色| 欧美成人综合一区| 亚洲另类av| 欧美精品v日韩精品v国产精品| 老司机精品在线| 国产一级精品aaaaa看| 国产一区二区三区亚洲| 国产免费高清一区| 牛牛影视久久网| 久久日韩精品| 九一亚洲精品| 性欧美精品一区二区三区在线播放| re久久精品视频| 亚洲人成网站在线播放2019| 日韩欧美午夜| 亚洲国产精品女人| 欧美日韩伊人| 成人一对一视频| 性色一区二区三区| 天堂av在线网站| 极品少妇xxxx精品少妇| 成年人看片网站| 成人免费观看av| 人人妻人人藻人人爽欧美一区| 欧美高清在线一区| 婷婷伊人五月天| 亚洲电影第三页| 无码人妻精品一区二区三区蜜桃91 | 99精品视频在线播放观看| 亚洲最大成人网站| 国产精品久久夜| 精品国产乱码久久久久久鸭王1| 亚洲自拍与偷拍| 亚洲黄色免费观看| 欧美日韩电影在线播放| 亚洲精品久久久狠狠狠爱 | 亚洲永久精品一区| 欧美最猛黑人xxxxx猛交| 一级特黄aaaaaa大片| 欧美成人在线直播| 你懂的视频在线观看| 俺也去精品视频在线观看| 女囚岛在线观看| 欧美做爰性生交视频| 日本黄色成人| 精品国产第一页| 羞羞答答成人影院www| 精品无码国模私拍视频| 1000部国产精品成人观看| 欧美人与性囗牲恔配| 亚洲日本乱码在线观看| a v视频在线观看| 欧美日韩电影在线| 熟妇高潮一区二区三区| 日韩一区av在线| 国产v日韩v欧美v| 欧美一二三在线| 好吊视频一区二区三区| 国产亚洲欧洲高清| 免费网站在线观看人| 国产v综合v亚洲欧美久久| 欧美.com| 亚洲国产精品视频一区| 亚洲人www| 亚洲女人在线观看| 国产偷国产偷亚洲高清人白洁| 国产性生活网站| 欧美日韩久久久久久| 天堂91在线| 欧美激情精品久久久久久蜜臀| 黄色日韩网站| 欧美高清一区二区| 亚洲高清激情| 中文字幕人妻熟女人妻a片| 国产精品蜜臀av| 无码人妻丰满熟妇区五十路| 亚洲电影免费观看高清| 国产乱色在线观看| 国产欧美在线观看| 精品久久久中文字幕| 男人日女人bb视频| 成人妖精视频yjsp地址| 中文字幕在线有码| 欧美精选一区二区| 中文字幕日本在线观看| 国产精品爱啪在线线免费观看| 久久午夜影院| 国产一线二线三线女| 国产成人三级在线观看| 五月天婷婷色综合| 3d动漫精品啪啪一区二区竹菊| 超碰在线影院| 国产精品jizz在线观看麻豆| 西野翔中文久久精品国产| 青青青青草视频| 不卡高清视频专区| 精品午夜福利视频| 日韩精品一区二| 日本aa在线| 成人三级视频在线观看一区二区| 综合久久精品| 日本少妇xxx| 亚洲影视在线播放| 成人午夜免费福利| 国模吧一区二区| 欧美国产极品| 欧美日韩在线视频一区二区三区| 91亚洲精品一区二区乱码| 精品国产乱码一区二区| 日韩精品在线看| 亚洲成人短视频| 视频一区二区综合| 久久99精品久久久久久| 精品人妻伦九区久久aaa片| 日韩亚洲欧美在线| 美足av综合网| 精品久久久久久一区二区里番| 一本色道久久综合亚洲精品不卡| 91视频啊啊啊| 91国模大尺度私拍在线视频| av大全在线免费看| 91亚洲永久免费精品| 国一区二区在线观看| 国模私拍在线观看| 色婷婷av一区| 麻豆传媒在线观看| 97av影视网在线观看| 日韩视频一区| 久久中文字幕精品| 制服丝袜中文字幕亚洲| 啪啪免费视频一区| 麻豆精品传媒视频| 免费人成黄页网站在线一区二区| 91视频综合网| 国产视频欧美视频| 久久伊人国产| 僵尸世界大战2 在线播放| 久久久国产精华| 国产强被迫伦姧在线观看无码| 久久久久一本一区二区青青蜜月| 免费观看久久av| 手机av在线网站| 天天综合色天天综合色h| 春暖花开成人亚洲区| 91久久偷偷做嫩草影院| 久久久青草婷婷精品综合日韩| h色网站在线观看| 精品视频中文字幕| 99国内精品久久久久| 男人用嘴添女人下身免费视频| 国产精品美女久久久久久久网站| 亚洲男人第一天堂| 国产精品久久久久久久久久ktv| 欧美三区在线| 国产精品酒店视频| 亚洲第一区中文字幕| 色综合视频一区二区三区44| 免费成人午夜视频| 亚洲免费观看高清在线观看|