黄a在线观看-黄a在线-黄a大片-黄色片在线看-黄色毛片免费-黄色大片网站

您的位置:首頁技術(shù)文章
文章詳情頁

MyBatis使用Zookeeper保存數(shù)據(jù)庫的配置可動態(tài)刷新的實現(xiàn)代碼

瀏覽:5日期:2023-10-18 11:05:44

核心關(guān)鍵點: 封裝一個DataSource, 重寫 getConnection 就可以實現(xiàn)

我們一步一步來看.

環(huán)境: Spring Cloud + MyBatis

MyBatis常規(guī)方式下配置數(shù)據(jù)源: 使用Spring的Configuration

package com.cnscud.cavedemo.fundmain.config;import com.cnscud.xpower.dbn.SimpleDBNDataSourceFactory;import org.apache.ibatis.session.SqlSessionFactory;import org.mybatis.spring.SqlSessionFactoryBean;import org.mybatis.spring.SqlSessionTemplate;import org.mybatis.spring.annotation.MapperScan;import org.springframework.beans.factory.annotation.Qualifier;import org.springframework.boot.context.properties.ConfigurationProperties;import org.springframework.boot.jdbc.DataSourceBuilder;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.context.annotation.Primary;import org.springframework.core.io.support.PathMatchingResourcePatternResolver;import org.springframework.jdbc.datasource.DataSourceTransactionManager;import org.springframework.transaction.PlatformTransactionManager;import javax.sql.DataSource;/** * Database Config 多數(shù)據(jù)源配置: 主數(shù)據(jù)源. * * @author Felix Zhang 2021-08-02 17:30 * @version 1.0.0 */@Configuration@MapperScan(basePackages = {'com.cnscud.cavedemo.fundmain.dao'},sqlSessionFactoryRef = 'sqlSessionFactoryMainDataSource')public class MainDataSourceConfig { //常規(guī)配置: 使用application.yml里面的配置. @Primary @Bean(name = 'mainDataSource') @ConfigurationProperties('spring.datasource.main') public DataSource mainDataSource() throws Exception {return DataSourceBuilder.create().build(); } @Primary @Bean(name = 'sqlSessionFactoryMainDataSource') public SqlSessionFactory sqlSessionFactoryMainDataSource(@Qualifier('mainDataSource') DataSource mainDataSource) throws Exception {SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();//org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration();//configuration.setMapUnderscoreToCamelCase(true);//factoryBean.setConfiguration(configuration);factoryBean.setConfigLocation(new PathMatchingResourcePatternResolver().getResource('classpath:mybatis-config.xml'));// 使用mainDataSource數(shù)據(jù)源, 連接mainDataSource庫factoryBean.setDataSource(mainDataSource);//下邊兩句僅僅用于*.xml文件,如果整個持久層操作不需要使用到xml文件的話(只用注解就可以搞定),則不加//指定entity和mapper xml的路徑//factoryBean.setTypeAliasesPackage('com.cnscud.cavedemo.fundmain.model');factoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources('classpath:com/cnscud/cavedemo/fundmain/mapper/*.xml'));return factoryBean.getObject(); } @Primary @Bean public SqlSessionTemplate sqlSessionTemplateMainDataSource(@Qualifier('sqlSessionFactoryMainDataSource') SqlSessionFactory sqlSessionTemplateMainDataSource) throws Exception {//使用注解中配置的Factoryreturn new SqlSessionTemplate(sqlSessionTemplateMainDataSource); } @Primary @Bean public PlatformTransactionManager mainTransactionManager(@Qualifier('mainDataSource') DataSource prodDataSource) {return new DataSourceTransactionManager(prodDataSource); }}

這里面獲取數(shù)據(jù)源的關(guān)鍵函數(shù)是 mainDataSource, 我們自己來實現(xiàn)就好了:

因為這個是一次性的工作, 所以我們無法修改DataSource的指向, 只能在DataSource內(nèi)部做文章, 所以我們需要自己實現(xiàn)一個DataSource.

其中的步驟比較多, 我們來看看最終結(jié)果:

最終的DataSourceWrapper

它完全封裝了一個DataSource, 自己并沒有任何DataSource的功能:

package com.cnscud.xpower.dbn;import javax.sql.DataSource;import java.io.PrintWriter;import java.sql.Connection;import java.sql.SQLException;import java.sql.SQLFeatureNotSupportedException;import java.util.logging.Logger;/** * Datasource wrapper, 為了方便動態(tài)創(chuàng)建DataSource. * * @author Felix Zhang 2021-08-05 14:14 * @version 1.0.0 */public class DynamicByZookeeperDataSourceWrapper implements DataSource { protected SimpleDBNConnectionPool simpleDBNConnectionPool; protected String bizName; public DynamicByZookeeperDataSourceWrapper(SimpleDBNConnectionPool simpleDBNConnectionPool, String bizName) {this.simpleDBNConnectionPool = simpleDBNConnectionPool;this.bizName = bizName; } protected DataSource pickDataSource() throws SQLException{return simpleDBNConnectionPool.getDataSource(bizName); } @Override public Connection getConnection() throws SQLException {return pickDataSource().getConnection(); } @Override public Connection getConnection(String username, String password) throws SQLException {return pickDataSource().getConnection(username, password); } @Override public <T> T unwrap(Class<T> iface) throws SQLException {return pickDataSource().unwrap(iface); } @Override public boolean isWrapperFor(Class<?> iface) throws SQLException {return pickDataSource().isWrapperFor(iface); } @Override public PrintWriter getLogWriter() throws SQLException {return pickDataSource().getLogWriter(); } @Override public void setLogWriter(PrintWriter out) throws SQLException {pickDataSource().setLogWriter(out); } @Override public void setLoginTimeout(int seconds) throws SQLException {pickDataSource().setLoginTimeout(seconds); } @Override public int getLoginTimeout() throws SQLException {return pickDataSource().getLoginTimeout(); } @Override public Logger getParentLogger() throws SQLFeatureNotSupportedException {throw new SQLFeatureNotSupportedException(); }}

SimpleDBNConnectionPool

支持多個數(shù)據(jù)源的暫存池, 可以根據(jù)name獲取不同的數(shù)據(jù)庫DataSource實例:

這個類負(fù)責(zé)創(chuàng)建DataSource, 保存在Map里. 并且能監(jiān)聽Zookeeper的變化, 一旦偵聽到變化, 就close現(xiàn)有的DataSource.

package com.cnscud.xpower.dbn;import com.github.zkclient.IZkDataListener;import com.zaxxer.hikari.HikariDataSource;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import javax.sql.DataSource;import java.sql.Connection;import java.sql.SQLException;import java.util.HashSet;import java.util.Map;import java.util.Set;import java.util.concurrent.ConcurrentHashMap;import static java.lang.String.format;/** * The simple datasource pool. * * 根據(jù)名字存放多個數(shù)據(jù)庫的DataSource, 并且會監(jiān)聽Zookeeper配置, 動態(tài)重建. * * @author adyliu (imxylz@gmail.com) * @since 2011-7-27 */public class SimpleDBNConnectionPool { final Logger logger = LoggerFactory.getLogger(getClass()); private Map<String, DataSource> instances = new ConcurrentHashMap<>(); private final Set<String> watcherSchema = new HashSet<String>(); public DataSource getInstance(String bizName) {try { return findDbInstance(bizName);}catch (SQLException e) { e.printStackTrace();}return null; } public Connection getConnection(String bizName) throws SQLException {DataSource ds = getDataSource(bizName);return ds.getConnection(); } public DataSource getDataSource(String bizName) throws SQLException {return findDbInstance(bizName); } protected void destroyInstance(final String bizName) {synchronized (instances) { DataSource oldInstanceIf = instances.remove(bizName); logger.warn(format('destoryInstance %s and %s', bizName, oldInstanceIf != null ? 'close datasource' : 'do nothing')); if (oldInstanceIf != null) {closeDataSource(oldInstanceIf); }} } protected void closeDataSource(DataSource ds) {if (ds instanceof HikariDataSource) { try {((HikariDataSource) ds).close(); } catch (Exception e) {logger.error('Close datasource failed. ', e); }} } private DataSource createInstance(Map<String, String> dbcfg) {return new SimpleDataSourceBuilder().buildDataSource(dbcfg); } private DataSource findDbInstance(final String bizName) throws SQLException {DataSource ins = instances.get(bizName);if (ins != null) { return ins;}synchronized (instances) {// 同步操作 ins = instances.get(bizName); if (ins != null) {return ins; } boolean success = false; try {Map<String, String> dbcfg = SchemeNodeHelper.getInstance(bizName);if (dbcfg == null) { throw new SQLException('No such datasouce: ' + bizName);}ins = createInstance(dbcfg);//log.warn('ins put '+ins);instances.put(bizName, ins);if (watcherSchema.add(bizName)) { SchemeNodeHelper.watchInstance(bizName, new IZkDataListener() {public void handleDataDeleted(String dataPath) throws Exception { logger.warn(dataPath + ' was deleted, so destroy the bizName ' + bizName); destroyInstance(bizName);}public void handleDataChange(String dataPath, byte[] data) throws Exception { logger.warn(dataPath + ' was changed, so destroy the bizName ' + bizName); destroyInstance(bizName);} });}success = true; } catch (SQLException e) {throw e; } catch (Throwable t) {throw new SQLException('cannot build datasource for bizName: ' + bizName, t); } finally {if (!success) { instances.remove(bizName);} }}return ins; }}

真正創(chuàng)建DataSource的代碼:

package com.cnscud.xpower.dbn;import com.zaxxer.hikari.HikariConfig;import com.zaxxer.hikari.HikariDataSource;import org.apache.commons.lang.StringUtils;import java.util.Map;/** * Hikari DataSource. * * 思考: 可以根據(jù)參數(shù)里面的類型來使用不同的庫創(chuàng)建DataSource, 例如Druid. (默認(rèn)為HikariDataSource) * * * @author Felix Zhang 2021-08-05 11:14 * @version 1.0.0 */public class SimpleDataSourceBuilder { public HikariDataSource buildDataSource(Map<String, String> args) {HikariConfig config = new HikariConfig();config.setJdbcUrl(getUrl(args));config.setUsername(args.get('username'));config.setPassword(args.get('password'));config.setDriverClassName(getDriverClassName(args));String maximumPoolSizeKey = 'maximum-pool-size';int maximumPoolSize = 30;if(StringUtils.isNotEmpty(args.get(maximumPoolSizeKey))){ maximumPoolSize = Integer.parseInt(args.get(maximumPoolSizeKey));}config.addDataSourceProperty('cachePrepStmts', 'true'); //是否自定義配置,為true時下面兩個參數(shù)才生效config.addDataSourceProperty('prepStmtCacheSize', maximumPoolSize); //連接池大小默認(rèn)25,官方推薦250-500config.addDataSourceProperty('prepStmtCacheSqlLimit', '2048'); //單條語句最大長度默認(rèn)256,官方推薦2048config.addDataSourceProperty('useServerPrepStmts', 'true'); //新版本MySQL支持服務(wù)器端準(zhǔn)備,開啟能夠得到顯著性能提升config.addDataSourceProperty('useLocalSessionState', 'true');config.addDataSourceProperty('useLocalTransactionState', 'true');config.addDataSourceProperty('rewriteBatchedStatements', 'true');config.addDataSourceProperty('cacheResultSetMetadata', 'true');config.addDataSourceProperty('cacheServerConfiguration', 'true');config.addDataSourceProperty('elideSetAutoCommits', 'true');config.addDataSourceProperty('maintainTimeStats', 'false');config.setMaximumPoolSize(maximumPoolSize); //config.setMinimumIdle(10);//最小閑置連接數(shù),默認(rèn)為0config.setMaxLifetime(600000);//最大生存時間config.setConnectionTimeout(30000);//超時時間30秒config.setIdleTimeout(60000);config.setConnectionTestQuery('select 1');return new HikariDataSource(config); } private String getDriverClassName(Map<String, String> args) {return args.get('driver-class-name'); } private String getUrl(Map<String, String> args) {return args.get('jdbc-url') == null ? args.get('url'): args.get('jdbc-url'); }}

為了方便讀取Zookeeper節(jié)點, 還有個SchemeNodeHelper:

支持兩種配置文件的方式 json或者Properties格式:

package com.cnscud.xpower.dbn;import com.cnscud.xpower.configcenter.ConfigCenter;import com.cnscud.xpower.utils.Jsons;import com.github.zkclient.IZkDataListener;import org.apache.commons.lang.StringUtils;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import java.io.IOException;import java.io.StringReader;import java.util.HashMap;import java.util.Map;import java.util.Properties;/** * 從Zookeeper的 /xpower/dbn節(jié)點下讀取數(shù)據(jù)庫配置. * 內(nèi)容支持兩種格式: json或者properties格式. * * JSON格式如下: * { * 'jdbc-url': 'jdbc:mysql://127.0.0.1:3306/cavedemo?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=UTC', * 'username': 'dbuser', * 'password': 'yourpassword', * 'driver-class-name': 'com.mysql.cj.jdbc.Driver' * } * * Properties格式如下: * jdbc-url: jdbc:mysql://127.0.0.1:3306/cavedemo?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=UTC * username: dbuser * password: password * driver-class-name: com.mysql.cj.jdbc.Driver * * @author Felix Zhang * @since 2021-8-5 */public class SchemeNodeHelper { static final Logger logger = LoggerFactory.getLogger(SchemeNodeHelper.class); //支持兩種格式: json, properties public static Map<String, String> getInstance(final String instanceName) throws Exception {String data = ConfigCenter.getInstance().getDataAsString('/xpower/dbn/' + instanceName);if(StringUtils.isEmpty(data)){ return null;}data = data.trim();if (data.startsWith('{')) { //as json Map<String, String> swap = Jsons.fromJson(data, Map.class); Map<String, String> result = new HashMap<>(); if (swap != null) {for (String name : swap.keySet()) { result.put(name.toLowerCase(), swap.get(name));} } return result;}else { //as properties Properties props = new Properties(); try {props.load(new StringReader(data)); } catch (IOException e) {logger.error('loading global config failed', e); } Map<String, String> result = new HashMap<>(); for (String name : props.stringPropertyNames()) {result.put(name.toLowerCase(), props.getProperty(name)); } return result;} } public static void watchInstance(final String bizName, final IZkDataListener listener) {final String path = '/xpower/dbn/' + bizName;ConfigCenter.getInstance().subscribeDataChanges(path, listener); }}

實際應(yīng)用

最后在MyBatis項目中, 替換原有MainDataSource代碼為:

/** * 添加@Primary注解,設(shè)置默認(rèn)數(shù)據(jù)源,事務(wù)管理器. * 此處使用了一個可以動態(tài)重建的DataSource, 如果Zookeeper配置改變,會動態(tài)重建. */ @Primary @Bean(name = 'mainDataSource') public DataSource mainDataSource() throws Exception {return SimpleDBNDataSourceFactory.getInstance().getDataSource('cavedemo'); }

運行項目, 發(fā)現(xiàn)可以連上數(shù)據(jù)庫, 并且不重啟項目的情況下, 動態(tài)修改數(shù)據(jù)庫配置, 能自動重連.

項目代碼:

https://github.com/cnscud/xpower/tree/main/xpower-main/src/main/java/com/cnscud/xpower/dbn

其中用到的 ConfigCenter 也在這個項目里, 也可以自己實現(xiàn), 就可以脫離本項目了.

本文來自博客園,作者:飛云~風(fēng)之谷,轉(zhuǎn)載請注明原文鏈接:https://www.cnblogs.com/cnscud/p/15103859.html

到此這篇關(guān)于MyBatis使用Zookeeper保存數(shù)據(jù)庫的配置,可動態(tài)刷新的文章就介紹到這了,更多相關(guān)MyBatis使用Zookeeper保存數(shù)據(jù)庫的配置,可動態(tài)刷新內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Mybatis 數(shù)據(jù)庫
相關(guān)文章:
主站蜘蛛池模板: 91香蕉视频官网 | 深夜男女福利18免费软件 | 国产又大又粗又长 | 久久精品久久综合 | 亚洲国产精品视频一区 | 亚洲最大色综合成人av | 亚洲色图视频在线观看 | 国产经典盗摄91区x99av | 精品一区二区三区在线播放视频 | 少妇下蹲露大唇无遮挡0 | 99视频免费在线观看 | 人与善交xuanwen3d | 欧美又大又硬又粗bbbbb | 99999久久久久久亚洲 | 亚洲成av人片在线观看天堂无码 | 亚洲自拍偷拍一区二区三区 | 五月色丁香婷婷网蜜臀av | 国产精品乱码人妻一区二区三区 | 国产精品高潮呻吟三区四区 | 国产精品偷窥熟女精品视频 | 亚洲成av人片一区二区密柚 | 精品深夜av无码一区二区老年 | 国产精品亚洲视频 | 尤物精品视频 | 激情三级在线 | 黄色特级视频 | 青草伊人久久综在合线亚洲观看 | 97久久人人超碰国产精品 | 日韩亚洲欧美在线观看 | 国产情侣呻吟对白高潮 | 亚洲天堂爱爱 | heyzo久久| jizz黄色片| 久久免费高清视频 | 一区久久 | 乱人伦人妻系列 | 成人做爰69片免费看网站 | 久草在线新时代视觉体验 | 狠狠色噜噜狠狠狠8888米奇 | 亚洲欧洲精品a片久久99 | 日本大尺度床戏揉捏胸 | 羞羞视频在线免费 | 瑟瑟在线视频 | 久久精品在线观看 | 男人j进女人p免费视频 | 天天狠狠色噜噜 | 狠狠伊人 | 国产三级做爰在线播放五魁 | 日本少妇做爰奶水狂喷小说 | 国产裸体按摩视频 | 乱人伦中文字幕成人网站在线 | 精品免费久久 | 午夜青青草 | 欧美日韩精品一区二区 | 免费看欧美中韩毛片影院 | 精品女同一区二区三区在线观看 | 农村黄性色生活片 | 欧美一级欧美三级在线观看 | 不卡毛片在线观看 | 国产精品爽爽久久久久久 | 日韩成人免费 | 国产亚洲真人做受在线观看 | 黄色一级片在线看 | 福利社午夜 | 免费日本黄色片 | 永久天堂网av手机版 | 美女内射毛片在线看3d | 中文字幕第315页 | 中文字幕亚洲激情 | 69久久久成人看片免费一区二 | 亚洲另类伦春色综合妖色成人网 | 自拍视频一区二区三区 | 亚色中文网 | 国产r级在线 | 国产三级高清一区二区 | 日韩a片无码毛片免费看 | 亚洲夜色 | 久久久婷 | 全黄一级裸片视频 | 暧暧视频在线观看 | 日韩超碰人人爽人人做人人添 | 婷婷开心色四房播播 | 美女赤身免费网站 | 理论片高清免费理论片毛毛片 | 久久精品中文字幕大胸 | 色婷婷狠狠| 成人午夜免费在线观看 | 无码av最新清无码专区吞精 | 亚洲性久久9久久爽 | 欧美成人777| 国产视频网站在线观看 | 巨大乳の超乳を揉んで乳巨在线播放 | 久久大综合 | 人妻少妇被猛烈进入中文字幕 | 成品片a人免费进入 | 一本大道久久卡一卡二卡三乱码 | 精品国产一区二区三区无码 | 亚洲一级影片 | 日本做爰全过程免费的叫床 | 综合网国产 | 成人精品网站在线观看 | 日日摸日日碰人妻无码老牲 | 日本丰满少妇高潮呻吟 | 国产av一区二区三区天堂综合网 | 波多野结衣一区二区三区中文字幕 | 狠狠躁夜夜躁人人爽天天 | 国产成人久久久精品二区三区 | 亚洲激情另类 | 亚洲精品成人在线 | 全黄h全肉边做边吃奶视频 熟妇人妻av无码一区二区三区 | 亚洲精品久久久久久宅男 | 国产无遮挡呻吟娇喘视频 | 性一交一乱一乱视频 | 成人av亚洲 | 黑人一级 | 又色又爽又黄18禁美女裸身无遮挡 | 午夜性刺激在线视频免费 | 亚洲成人高清 | 亚洲专区 变态 另类 | 噼里啪啦在线播放 | 91久久精品国产91性色69 | 国产精品精品软件 | 台湾亚洲精品一区二区tv | 欧美乱大交做爰xxxⅹ小说 | 蜜乳av懂色av粉嫩av | 国产高清成人久久 | 黄色一级免费网站 | 国产精品嫩草影院入口日本一区二 | 夜夜天天操 | 色综合中文网 | 亚洲视频欧洲视频 | 日本aaaaa女人裸体h片 | 亚洲爱爱片 | 波多一区 | 夜夜躁狠狠躁日日躁2020 | 国产91色在线 | 免费 | 欧美精品在线一区二区 | 小荡货奶真大水多好紧视频 | 亚洲v欧美v国产v在线观看 | 亚洲天堂网在线观看 | 黑人好猛厉害爽受不了好大撑 | 看免费毛片 | 热久久美女精品天天吊色 | 日本免费高清视频 | 毛片毛片毛片毛片毛片毛片毛片 | 精品久久久久久中文字幕人妻最新 | 九九九国产| 永久黄网站色视频免费直播 | 女性脱给我揉视频 | 国产精自产拍久久久久久蜜 | 日韩中文字幕久久 | 久久91精品国产91久久久 | 久久国产精99精产国高潮 | 久久天天综合桃花久久 | 影音先锋成人资源网站 | 国产成人在线免费观看 | 色偷偷av一区二区 | 韩国三级hd中文字幕三义 | 欧美在线观看a | 欧美性折磨bdsm激情另类视频 | 中国少妇内射xxxhd免费 | 欧美日韩1区2区 | 久久69| 极品少妇在线观看 | 老子午夜精品无码不卡 | 国语播放老妇呻吟对白 | 五月婷婷社区 | 日批免费观看 | 久久久久久蜜桃 | 亚洲一区精品二人人爽久久 | 在线观看中文字幕dvd播放 | 亚洲红桃视频 | 蜜臀中文字幕 | 狼人伊人久久 | 国产性一乱一性一伧的解决方法 | 欧美xxxx中国 | 99久热在线精品视频成人一区 | 女人让男人桶爽30分钟 | 久久免费精彩视频 | 日韩性生活视频 | 香蕉av在线 | 屁屁影院一区二区三区 | 久久精品人人做人人综合试看 | 国产男女猛烈无遮挡a片漫画 | 性色av无码免费一区二区三区 | 亚洲国产成人精品女人 | 一夲道无码人妻精品一区二区 | 亚洲a人| jizzzz成熟丰满韩国女视频 | 日本国产乱弄免费视频 | 四虎一区二区三区 | 亚洲另类激情专区小说图片 | 午夜伦4410yy妇女久久v | 尤物99国产成人精品视频 | 欧美高清在线精品一区 | 超碰色偷偷 | 久久婷婷国产麻豆91天堂 | 黄色片女人 | 精品久久久久久乱码天堂 | 窝窝午夜看片 | 国产精品午夜无码av体验区 | 97精品国产露脸对白 | 在线看黄色av | 一本久道高清无码视频 | 永久免费无码网站在线观看 | 天堂www中文在线资源 | 色噜噜狠狠一区二区 | 国产色视频在线播放 | 亚洲6080yy久久无码产自国产 | 在线播放中文字幕 | 丁香六月婷婷开心婷婷网 | 欧美三级一区二区 | 欧美日韩色图片 | 和寂寞少妇做爰bd | 国产a在亚洲线播放 | 亚洲小视频在线观看 | 少妇做爰免费视频网站www | 伊人久久综合视频 | 久久伊人久久 | 熟女人妻av五十路六十路 | 免费黄色三级网站 | 天天摸夜夜添狠狠添婷婷 | 免费观看黄色 | 香蕉久久夜色精品国产更新时间 | 国产真实乱人偷精品视频 | 天天综合亚洲综合网天天αⅴ | 蜜桃久久久久 | 992tv成人国产福利在线 | 天干夜天干天天天爽视频 | 成人女人看片免费视频放人 | 色呦呦在线看 | 久操伊人网 | 成人性生交大片免费8 | 亚洲中文字幕在线无码一区二区 | 国产精品久久久爽爽爽麻豆色哟哟 | 久久99精品国产麻豆婷婷小说 | 91香蕉视频在线看 | av久操| 国产三级视频网站 | 国产精品视频二区不卡 | 国产女18毛片多18精品 | 精品丰满人妻无套内射 | 青青国产视频 | 做爰xxxⅹ性69免费软件 | 欧美日韩一区二区三区69堂 | av网子| 777奇米888色狠狠俺也去 | 黄色午夜影院 | 国产suv精品一区 | 在线中文字幕网站 | 涩涩屋www视频在线观看高清 | 自拍偷拍99| 国产精品久久久久久一区二区三区 | 中文字幕免费在线观看视频 | 国产乱淫av免费观看 | 国产中文字幕在线观看 | 91嫩草国产露脸精品国产 | 欧美在线激情 | 十八岁污网站在线观看 | 国产欧精精久久久久久久 | 成人在线观 | 欧美深夜在线 | xxx偷拍撒尿xxxx| 九九九九精品 | 中文字幕成人在线视频 | 在线观看免费毛片 | 欧美成人免费全部 | 亚洲黄色在线免费观看 | 7色av | 欧美乱妇视频 | 天天看国91产在线精品福利桃色 | 欧美爱视频 | 欧美成人手机视频 | 免费精品久久久久久久一区二区 | 国产欧美日韩小视频 | 手机国产乱子伦精品视频 | 亚洲人成精品久久久久 | 日韩一级片一区二区三区 | 久久久久久久久久久久久女国产乱 | 欧美大片一级 | 成人无码av片在线观看 | 久久夜靖品2区 | 老子影院午夜伦不卡大全 | 中文天堂网 | 人与性动交aaaabbbb | 一区二区精品久久 | 日韩免费精品视频 | 国产毛片毛片毛片毛片毛片 | 果冻传媒18禁免费视频 | 女人被狂躁的高潮免费视频 | 午夜美女福利视频 | 国产偷伦在线 | 亚洲永久免费网站 | 国产激情视频一区二区三区 | 乌克兰少妇xxxx做受野外 | 91精品国产综合久久香蕉的特点 | 一区二区三区观看 | 中文字幕在线一区二区三区 | 亚洲精品99久久久久中文字幕 | 亚洲一区二区视频在线 | 免费a级大片| 久久中文字幕网 | 久草在线新时代视觉体验 | 十八禁无码免费网站 | 黄色的网站在线免费观看 | 亚洲情侣av | 艳妇乳肉豪妇荡乳av | 98堂 最新网名 | 在线免费精品 | 亚洲第一色图 | 在线播放中文字幕 | 内射爽无广熟女亚洲 | 国产精品高潮呻吟久久av无 | 免费一级特黄3大片视频 | 国产主播中文字幕 | 最好看十大无码av | 欧美一a | 亚洲第一福利网站 | 中文字幕精品久久久久 | 绯色av一区二区三区蜜臀 | 97视频成人| 午夜精品久久久久久久爽 | 午夜夜伦鲁鲁片六度影院 | 人人爽人人做 | 国产午夜毛片 | 妹子干综合| 国产精品96久久久久久又黄又硬 | 国产山村乱淫老妇av | 国产群p视频 | 色中文字幕在线观看 | 免费久久网站 | 国产乱子伦一区二区三区四区五区 | 91涩涩视频 | 亚洲乱码一区二区三区在线观看 | 久久久久久久久99精品 | 自拍偷拍21p | 国产黄网站 | 青青草华人在线视频 | 久久网站热最新地址 | 色综合久久中文综合网 | 亚洲国产精品视频在线观看 | 亚洲狠狠干 | 日韩一区中文字幕 | 国产亚洲精品久久久久动 | 国产日韩欧美在线 | 免费无码又爽又黄又刺激网站 | 一本色道久久综合狠狠躁的推荐 | 青青久草在线视频 | 又色又污又爽又黄的网站 | 国产精品视频一区二区三 | 屁屁影院ccyy备用地址 | 久青草影院在线观看国产 | xxxxxx欧美| 国产精品一区在线观看你懂的 | 日韩在线不卡免费视频一区 | 91丝袜超薄交口足 | 亚洲天堂男人影院 | 黄色毛片毛茸茸 | 伊在人天堂亚洲香蕉精品区 | 亚洲1区 | 2019中文字幕网站 | 亚洲视频在线免费观看 | 欧美黄色性生活 | 成人动漫综合网 | 亚洲砖区区免费 | 成年女人毛片免费视频 | 久久久综合香蕉尹人综合网 | 操操操插插插 | 国产精品二区一区二区aⅴ污介绍 | 中文字幕免费高清在线观看 | 本道综合精品 | 欧美成人极品 | 97久久久久久久 | 狠狠影院 | 亚洲高清网| 亚洲精品成a人在线 | 亚洲天堂欧美在线 | 欧美天天性影院 | 亚洲乱码日产精品bd在线观看 | 中文字幕乱码日本亚洲一区二区 | 三级成人网 | 99麻豆久久久国产精品免费 | 亚洲 丝袜 另类 动漫 二区 | 国产精品人妻熟女毛片av | 亚洲国产长腿丝袜av天堂 | 免费毛片软件 | 女同av在线播放 | 国产精品日日做人人爱 | 精品美女一区 | 51成人| 日本aⅴ在线观看 | 69视频在线 | 五月天狠狠操 | 少妇挑战三个黑人惨叫4p国语 | 国产精品视频一区二区二 | 免费麻豆国产一区二区三区四区 | 国产成年无码久久久久毛片 | 国产精品卡一卡二 | 黄色生活毛片 | 小镇姑娘国语版在线观看免费 | 91久久精品国产91久久 | 亚洲色图激情小说 | 日韩久久精品一区二区三区 | 波多野结衣一区二区三区四区 | 兔费看少妇性l交大片免费 97久久精品无码一区二区 | 欧美另类videosbestsex日本 | 一级草逼片| 免费国产一级 | 性一交一黄一片 | 亚洲日本精品视频 | 都市激情综合 | 精品国产一区二区三区久久久 | 国产精品岛国久久久久久久久红粉 | 午夜久久久 | 国内a∨免费播放 | 中文字幕在线无码一区二区三区 | 五月婷婷综合色 | 尤物国产视频 | 久久久久网站 | 三级在线网址 | 日韩第八页 | 136av导航| 另类亚洲色图 | 狠狠插综合 | 日本一区二区视频免费 | 少妇裸体淫交免费视频网站 | a级片视频网站 | 五月丁香综合缴情六月小说 | 日本黄色大片网站 | 波多野结衣av无码久久一区 | 美女啪啪av | 婷婷色在线视频 | 麻豆视 | 99久久久无码国产精品免费 | 撕开少妇奶罩疯狂揉吮 | 妓院一钑片免看黄大片 | 又湿又紧又大又爽a视频国产 | 日韩中文字幕不卡 | 中国少妇的呻吟xvideoshd | 欧美日本韩国一区二区三区 | 成人免费午夜视频69影院 | 自拍偷拍视频网站 | 欧美成人久久久免费播放 | 国产精品色综合一区二区三区 | 天操夜夜操 | 久久av高潮av无码av喷吹 | 女高中生第一次破苞av | 人妻少妇精品视频二区 | 97久久国产| 成人动漫在线观看免费 | 人人妻人人澡人人爽欧美精品 | 国产精品久久久999 国产精品久久久对白 | 日韩毛片免费无码无毒视频观看 | 国产成人 综合 亚洲欧美 | 亚洲婷婷av | 国产精品区一区二区三在线播放 | 女人被爽到呻吟gif动态图视看 | 强开小嫩苞一区二区三区图片 | 亚洲精品一区二区久久 | 国产丰满麻豆videossexhd 无码少妇一区二区三区免费 | 人与善交xuanwen3d | 在熟睡夫面前侵犯我在线播放 | jizz一区二区| 久久九九热re6这里有精品 | 加勒比中文字幕无码一区 | 国产麻豆一精品一av一免费 | 射久久| 国产一线二线三线wwww | 亚洲精品久久久蜜桃网站 | 高清成人| 国产无套水多在线观看 | 午夜三级做爰视频在线看 | 久久久久久aaaabbbb | 亚洲自偷精品视频自拍 | 亚洲 欧美 中文字幕 | 午夜日韩av | 色综合精品| www成年人 | 欧美在线视频精品 | 五月色婷 | 国产足控在线网站 | 少妇大叫太大太爽受不了 | 影音先锋每日av色资源站 | 亚洲天堂一区二区三区四区 | www.久久婷婷 | 少妇愉情理伦片bd | tube少妇高潮 | 亚洲精品热| 久久天堂精品 | 美女视频黄频a免费 | 国产人妻一区二区三区四区五区六 | av影视在线 | 爽交换快高h中文字幕 | 夜夜嗨av一区二区三区中文字幕 | 国产精品999| 一级成人免费视频 | 少妇高潮灌满白浆毛片免费看 | 国产午夜片 | 亚洲图色av | 国产69精品久久久久999小说 | 最近中文字幕日本 | 污视频在线 | 国模冰冰炮一区二区 | 国内自在二三区 | 婷婷爱五月天 | 亚洲综合网址 | av在线播放国产 | 五月婷婷,六月丁香 | 农村少妇吞精夜夜爽视频 | 国产男女猛烈无遮挡免费视频网站 | 久草麻豆 | 亚洲一区二区免费视频 | 午夜免费激情视频 | 欧美黑人性暴力猛交喷水 | 香港三日三级少妇三级66 | 日韩一区二区在线观看视频 | 天天爽| 欧美做受高潮中文字幕 | 不卡国产一区二区三区四区 | 精品一区二区三区欧美 | 久久免费看少妇a高潮一片黄特 | 熟女人妻av五十路六十路 | 自拍偷拍亚洲区 | av网站在线观看免费 | 99噜噜噜在线播放 | 秋霞av鲁丝片一区二区 | 性猛进少妇xxxx富婆的 | 美国人性欧美xxxx | 成人免费一区二区 | 青草青草视频2免费观看 | 看看黄色片 | 日韩字幕在线 | 成人永久免费视频 | 欧美乱轮| 天天躁日日躁狠狠躁欧美老妇小说 | av狠狠干 | 亚洲欧美v国产蜜芽tv | 麻豆最新 | 久久美女免费视频 | 日本美女一级视频 | 最近在线更新8中文字幕免费 | 日本一级大片 | 农村乡下女人毛片 | 亚洲曰本女同2 | 国产va亚洲va在线va | 51国偷自产一区二区三区的来源 | 精品欧美乱码久久久久久 | 国产免费a∨片在线观看不卡 | 国产成人免费av一区二区午夜 | 成年在线观看 | 黄色免费在线网址 | 黄色软件链接 | 日韩永久免费 | 狂野欧美性猛交xxⅹ李丽珍 | 国产精品夜夜夜爽张柏芝 | jazzjazz国产精品麻豆 | 亚洲www在线 | 最近中文字幕免费观看 | 伊人精品久久久大香线蕉 | 一本加勒比hezyo东京图库 | 丁香久久 | 在线观看av网站永久 | 青青操在线观看 | 国产精品热久久高潮av袁孑怡 | www久久爱69com | 领导边摸边吃奶边做爽在线观看 | 久久午夜神器 | 人妻夜夜爽天天爽爽一区 | 免费午夜av | 国产精品一区二区在线看 | 桃色网站在线观看 | 亚洲一区免费视频 | 黄色a v视频 | 久久亚洲高潮流白浆av软件 | 爱爱爱爱网站 | 美日韩毛片 | 国产精品污视频 | 日韩国产大片 | 污视频在线观看免费网站 | 天堂在线资源最新版 | 国产免费中文字幕 | 精品国产乱码久久久久久天狼 | 久久大陆 | 亚洲激情另类 | 好吊爽视频988gaocom | 国产成人高清在线 | 国语av在线| 十二月综合缴缴情小说 | 熟妇人妻av中文字幕老熟妇 | 无码人中文字幕 | 久久婷婷色综合一区二区 | 秒拍福利视频 | 国产69堂免费视频 | 日韩一区二区三区视频在线 | 国产亚洲三级 | 毛片无遮挡 | 欧美做爰猛烈床戏大尺度 | 叶山小百合av一区二区 | 国产人妻大战黑人第1集 | 久久久国产精品人人片 | 天堂视频一区 | www.色亚洲 | 加比勒色综合久久 | 美女黄色影院 | 精品国产专区 | 久久婷婷五月综合97色一本一本 | 亚洲国产欧美一区二区潘金莲 | 上海富婆spa又高潮了 | 国产成人免费一区二区60岁 | 在线h片| 国产人妻久久精品二区三区老狼 | 亚洲久热 | 先锋影音人妻啪啪va资源网站 | av黄色免费观看 | caoporn国产|