久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁技術文章
文章詳情頁

使用springboot aop來實現讀寫分離和事物配置

瀏覽:182日期:2023-05-20 18:55:21

什么事讀寫分離

讀寫分離,基本的原理是讓主數據庫處理事務性增、改、刪操作(INSERT、UPDATE、DELETE),而從數據庫處理SELECT查詢操作。數據庫復制被用來把事務性操作導致的變更同步到集群中的從數據庫。

為什么要實現讀寫分離

增加冗余

增加了機器的處理能力

對于讀操作為主的應用,使用讀寫分離是最好的場景,因為可以確保寫的服務器壓力更小,而讀又可以接受點時間上的延遲。

實現

本文介紹利用spring aop來動態切換數據源來實現讀寫分離。

先建一個maven項目,導入springBoot依賴。

<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.2.RELEASE</version></parent><dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency> <!--mybatis--> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.1</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <!-- druid --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>${druid.version}</version> </dependency> <!-- mysql connector--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql-connector.version}</version> </dependency> <!--test--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency></dependencies>

然后在配置文件application.yml中自定義數據源配置項

server: port: 8080logging: level: org.springframework: INFO com.qiang: DEBUGspring: output: ansi: enabled: always datasource: type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/db_area?characterEncoding=utf-8&serverTimezone=Asia/Shanghai username: root password: root db: readsize: 2 read0: type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/db_area?characterEncoding=utf-8&serverTimezone=Asia/Shanghai username: root password: root read1: type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/db_area?characterEncoding=utf-8&serverTimezone=Asia/Shanghai username: root password: root aop: auto: true proxy-target-class: true

配置Druid

package com.qiang.config;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;import org.springframework.boot.context.properties.ConfigurationProperties;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.context.annotation.Primary;import javax.sql.DataSource;/** * @author gengqiang * @date 2018/5/3 */@Configurationpublic class DruidConfig { private Logger logger = LoggerFactory.getLogger(DruidConfig.class /** * 主據源 * @return */ @Primary @Bean(name = 'dataSource') @ConfigurationProperties(prefix = 'spring.datasource') public DataSource dataSource() { return DataSourceBuilder.create().type(com.alibaba.druid.pool.DruidDataSource.class).build(); } /** * 從數據源1 * @return */ @Bean(name = 'readDataSource0') @ConfigurationProperties(prefix = 'spring.db.read0') public DataSource readDataSource0() { return DataSourceBuilder.create().type(com.alibaba.druid.pool.DruidDataSource.class).build(); } /** * 從數據源2 * @return */ @Bean(name = 'readDataSource1') @ConfigurationProperties(prefix = 'spring.db.read1') public DataSource readDataSource1() { return DataSourceBuilder.create().type(com.alibaba.druid.pool.DruidDataSource.class).build(); }}

配置Mybaits

package com.qiang.config;import com.qiang.config.db.DataSourceType;import com.qiang.config.db.RoutingDataSource;import org.mybatis.spring.SqlSessionFactoryBean;import org.mybatis.spring.annotation.MapperScan;import org.mybatis.spring.boot.autoconfigure.SpringBootVFS;import org.springframework.beans.BeansException;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Value;import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;import org.springframework.context.ApplicationContext;import org.springframework.context.ApplicationContextAware;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.core.io.ClassPathResource;import org.springframework.core.io.Resource;import org.springframework.core.io.support.PathMatchingResourcePatternResolver;import org.springframework.core.io.support.ResourcePatternResolver;import org.springframework.jdbc.datasource.DataSourceTransactionManager;import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;import org.springframework.transaction.PlatformTransactionManager;import org.springframework.transaction.annotation.EnableTransactionManagement;import org.springframework.transaction.annotation.TransactionManagementConfigurer;import javax.sql.DataSource;import java.io.IOException;import java.util.HashMap;import java.util.Map;/** * @author gengqiang * @date 2018/5/3 */@Configuration@EnableTransactionManagement(order = 2)@MapperScan(basePackages = {'com.qiang.demo.mapper'})public class MybatisConfig implements TransactionManagementConfigurer, ApplicationContextAware { private static ApplicationContext context; /** * 寫庫數據源 */ @Autowired private DataSource dataSource; /** * 讀數據源數量 */ @Value('${spring.db.readsize}') private Integer readsize; /** * 數據源路由代理 * * @return */ @Bean public AbstractRoutingDataSource routingDataSouceProxy() { RoutingDataSource proxy = new RoutingDataSource(readsize); Map<Object, Object> targetDataSources = new HashMap<>(readsize + 1); targetDataSources.put(DataSourceType.WRITE.getType(), dataSource); for (int i = 0; i < readsize; i++) { DataSource d = context.getBean('readDataSource' + i, DataSource.class); targetDataSources.put(i, d); } proxy.setDefaultTargetDataSource(dataSource); proxy.setTargetDataSources(targetDataSources); return proxy; } @Bean @ConditionalOnMissingBean public SqlSessionFactoryBean sqlSessionFactory() throws IOException { SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); bean.setDataSource(routingDataSouceProxy()); bean.setVfs(SpringBootVFS.class); bean.setTypeAliasesPackage('com.qiang'); Resource configResource = new ClassPathResource('/mybatis-config.xml'); bean.setConfigLocation(configResource); ResourcePatternResolver mapperResource = new PathMatchingResourcePatternResolver(); bean.setMapperLocations(mapperResource.getResources('classpath*:mapper/**/*.xml')); return bean; } @Override public PlatformTransactionManager annotationDrivenTransactionManager() { return new DataSourceTransactionManager(routingDataSouceProxy()); } @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { if (context == null) { context = applicationContext; } }}

其中實現數據源切換的功能就是自定義一個類擴展AbstractRoutingDataSource抽象類,就是代碼中的定義的RoutingDataSource,其實該相當于數據源DataSourcer的路由中介,可以實現在項目運行時根據相應key值切換到對應的數據源DataSource上。

RoutingDataSource.class

package com.qiang.config.db;import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;import java.util.concurrent.atomic.AtomicInteger;/** * 數據源路由 * * @author gengqiang */public class RoutingDataSource extends AbstractRoutingDataSource { private AtomicInteger count = new AtomicInteger(0); private int readsize; public RoutingDataSource(int readsize) { this.readsize = readsize; } @Override protected Object determineCurrentLookupKey() { String typeKey = DataSourceContextHolder.getJdbcType(); if (typeKey == null) { logger.error('無法確定數據源'); } if (typeKey.equals(DataSourceType.WRITE.getType())) { return DataSourceType.WRITE.getType(); } //讀庫進行負載均衡 int a = count.getAndAdd(1); int lookupkey = a % readsize; return lookupkey; }}

其中用到了2個輔助類

package com.qiang.config.db;import org.slf4j.Logger;import org.slf4j.LoggerFactory;/** * 全局數據源 * * @author gengqiang */public class DataSourceContextHolder { private static Logger logger = LoggerFactory.getLogger(DataSourceContextHolder.class); private final static ThreadLocal<String> local = new ThreadLocal<>(); public static ThreadLocal<String> getLocal() { return local; } public static void read() { logger.debug('切換至[讀]數據源'); local.set(DataSourceType.READ.getType()); } public static void write() { logger.debug('切換至[寫]數據源'); local.set(DataSourceType.WRITE.getType()); } public static String getJdbcType() { return local.get(); }}

package com.qiang.config.db;/** * @author gengqiang */public enum DataSourceType { READ('read', '讀庫'), WRITE('write', '寫庫'); private String type; private String name; DataSourceType(String type, String name) { this.type = type; this.name = name; } public String getType() { return type; } public void setType(String type) { this.type = type; } public String getName() { return name; } public void setName(String name) { this.name = name; }}

最后通過aop設置切面,攔截讀寫來動態的設置數據源

package com.qiang.config.aop;import com.qiang.config.db.DataSourceContextHolder;import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Before;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.core.annotation.Order;import org.springframework.stereotype.Component;/** * 攔截數據庫讀寫 * * @author gengqiang */@Aspect@Component@Order(1)public class DataSourceAspect { Logger logger = LoggerFactory.getLogger(getClass()); @Before('execution(* com.qiang..*.*ServiceImpl.find*(..)) ' + '|| execution(* com.qiang..*.*ServiceImpl.count*(..))' + '|| execution(* com.qiang..*.*ServiceImpl.sel*(..))' + '|| execution(* com.qiang..*.*ServiceImpl.get*(..))' ) public void setReadDataSourceType() { logger.debug('攔截[read]方法'); DataSourceContextHolder.read(); } @Before('execution(* com.qiang..*.*ServiceImpl.insert*(..)) ' + '|| execution(* com.qiang..*.*ServiceImpl.save*(..))' + '|| execution(* com.qiang..*.*ServiceImpl.update*(..))' + '|| execution(* com.qiang..*.*ServiceImpl.set*(..))' + '|| execution(* com.qiang..*.*ServiceImpl.del*(..))') public void setWriteDataSourceType() { logger.debug('攔截[write]操作'); DataSourceContextHolder.write(); }}

主要的代碼就寫好了,下面來測試一下是否讀寫分離。

寫一個測試類:

package com.qiang;import com.qiang.demo.entity.Area;import com.qiang.demo.service.AreaService;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;import org.springframework.test.context.junit4.SpringRunner;/** * @author gengqiang * @date 2018/5/4 */@RunWith(SpringRunner.class)@SpringBootTestpublic class TestApplication { @Autowired private AreaService areaService; @Test public void test() { Area area = new Area(); area.setDistrictId('0000'); area.setName('test'); area.setParentId(0); area.setLevel(1); areaService.insert(area); } @Test public void test2() { areaService.selectByPrimaryKey(1); }}

其中第一個測試插入數據,第二個測試查詢。

第一測試結果:

使用springboot aop來實現讀寫分離和事物配置

第二個測結果:

使用springboot aop來實現讀寫分離和事物配置

從結果看出來第一個走的寫數據源,就是主數據源,第二個的走讀數據源,就是從數據源。

然后我們在測試一下事物,看遇到異常是否會滾。

測試:

@Test public void contextLoads() throws Exception { try { areaService.insertBack(); } catch (Exception e) {// e.printStackTrace(); } System.out.println(areaService.count(new Area())); }

其中service:

@Override@Transactional(rollbackFor = Exception.class)public void insertBack() { Area area = new Area(); area.setDistrictId('0000'); area.setName('test'); area.setParentId(0); area.setLevel(1); mapper.insert(area); throw new RuntimeException();}

方法上加@Transactional,聲明一個事物。

使用springboot aop來實現讀寫分離和事物配置

看一下運行結果,雖然運行插入的時候,sql是運行了,但最后查詢的時候數量為0,說明會滾了。

配置事物

使用springboot aop來實現讀寫分離和事物配置

第一步需要加一個注解@EnableTransactionManagement,后面的參數是為了區分aop和事物執行的順序。

然后在需要會滾的方法上加一個注解@Transactional。

源代碼地址

以上這篇使用springboot aop來實現讀寫分離和事物配置就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Spring
相關文章:
主站蜘蛛池模板: 九九热精 | www国产高清 | 在线一区二区三区 | 亚洲一二三 | 亚洲日韩aⅴ在线视频 | 日本精品一区二区三区视频 | 久久九九视频 | 亚洲精品一区二区在线 | 久久草视频 | 国产精品久久久久久婷婷天堂 | 国产精品成人在线观看 | 激情小视频在线观看 | 国产成人精品一区二区视频免费 | 国产真实乱全部视频 | 欧美福利一区二区三区 | 伊人超碰 | 亚洲欧美日韩国产综合 | 欧美日韩精| 专干老肥女人88av | 成人精品久久久 | 国产黄色大片 | 欧美一区二区成人 | 日韩福利视频 | 伊人午夜 | 日本涩涩网站 | 久久青青操 | 久久久天堂国产精品女人 | 午夜精品网站 | 午夜黄色影院 | 国产图区 | 中文av在线免费观看 | 国产精品久久久久国产a级 99精品欧美一区二区三区综合在线 | 国产成人精品一区二区三区网站观看 | 可以免费在线观看av的网站 | 亚洲精品视频在线观看网站 | 天天干天天谢 | 国产亚洲精品久久久久久久久 | 我看午夜视频 | 电影91久久久 | 国产精品久久精品 | 日韩一区中文字幕 | 亚洲成人免费在线观看 | 日韩欧美三区 | 久久成| 亚洲欧美综合 | 99视频网站 | 亚洲欧美一区二区三区不卡 | 国产青青草 | 九九热精品视频 | 久久久亚洲一区二区三区 | 99精品热视频 | 精品视频在线观看一区二区 | 性欧美精品高清 | 欧美日韩不卡合集视频 | 一区二区三区在线免费播放 | 国产富婆一级全黄大片 | 91一区二区在线 | 91成人免费在线视频 | 日本少妇bbbb爽爽bbb美 | 日本一二三区在线 | 精品久久久成人 | 欧美日韩电影一区二区 | 亚洲欧美久久久 | aⅴ色国产 欧美 | 久久久久亚洲视频 | 丁香午夜 | 亚洲成人av | 中文精品久久久 | 欧美视频亚洲视频 | 日韩一区二区三区在线 | 在线中文字幕视频 | 久久久国产精品 | 在线观看国产精品一区二区 | 黄网在线免费观看 | 久久精品在线视频 | 欧美成人一区二区三区 | 日韩一二区| 91精品国产乱码久久久久久久久 | 国产香蕉视频在线播放 | 人人鲁人人莫一区二区三区 | 欧美国产日韩一区 | 国产精品中文字幕在线观看 | 日本欧美大片 | 亚洲色图88 | 天天干狠狠干 | 不卡二区 | 国产精品成人品 | 91精品国产91久久久久久最新 | 国产xxx护士爽免费看 | 日韩免费av一区二区 | 91精品久久久久久久久久入口 | 亚洲精品乱码久久久久久麻豆不卡 | 精品久久一区 | 99久久婷婷国产综合精品 | 2018国产大陆天天弄 | 在线中文字幕视频 | 日本在线视 | 欧美不卡视频 | www国产成人免费观看视频,深夜成人网 | 国产精品人人做人人爽人人添 | 色综合天天天天做夜夜夜夜做 | 成年人免费看片 | 麻豆久久久9性大片 | 久久久久亚洲国产 | 特黄一级| 欧美日韩中文 | 国产精品久久一区 | 亚洲精品粉嫩美女一区 | 亚洲精品国产偷自在线观看 | 国产精品美女视频一区二区三区 | 久久久久久91亚洲精品中文字幕 | 国产伦精品一区二区三区在线 | 国产一区不卡视频 | 精久久 | 一区二区三 | 中国大陆高清aⅴ毛片 | 最新中文字幕在线 | 久久久大 | 狠狠综合久久 | 亚洲一区欧美一区 | 日本免费在线 | 视频一区二区中文字幕 | a欧美 | 蜜月va乱码一区二区三区 | 国产在线看h | 综合色婷婷一区二区亚洲欧美国产 | 亚洲精品一区在线观看 | 99热首页| 国产日韩视频在线观看 | www.色在线| 国产精品精品视频一区二区三区 | 欧美成人精品一区二区三区 | 人人干天天操 | 91精品国产91久久久久久最新 | 精品久久av | 免费在线成人 | 欧美日本一区 | 国产精品久久在线观看 | 欧美国产91 | 一区二区三区日韩 | 伊人免费网| 国产伦精品一区二区三毛 | 在线视频一区二区三区 | 国产中文字幕在线观看 | 久久国内免费视频 | 国产精品一区二区在线观看 | 日本精品视频在线观看 | www.麻豆视频| 97久久久| 日韩3级在线观看 | 伊人网综合视频 | 久久精品亚洲欧美日韩精品中文字幕 | 日韩精品一区二区三区四区视频 | 欧美精品久久久 | 国产区精品 | 无毒黄网 | 国产综合精品一区二区三区 | 精品久久99 | 情五月 | 成人在线精品视频 | 亚洲一区二区三区四区的 | 日韩高清国产一区在线 | 久久综合狠狠综合久久 | a级在线观看免费 | 亚洲国产一区二区在线观看 | 亚洲国产精品99久久久久久久久 | 国产精品一区二区三区四区 | 国产成人精品一区二区三区四区 | 国产一区二区在线播放 | 久久国产一区二区 | 国产一区二区精品丝袜 | av片免费看| 国产精品久久国产精品99 gif | 亚洲国产精品久久久久秋霞不卡 | 一本一本久久a久久精品综合妖精 | 91一区| 自拍第一页 | 久久精品美女 | 日韩电影一区二区三区 | 日韩欧美在线视频 | 日日干夜夜操 | 久久国产精品久久 | 精品国产青草久久久久福利 | 色国产精品 | 91福利视频导航 | 成人超碰在线 | 亚洲精品一区在线观看 | 国产成年免费视频 | 最近韩国日本免费观看mv免费版 | 91av官网| 99国产精品久久久久久久成人热 | 国产欧美日韩综合精品一区二区 | 精品午夜久久久 | 大陆一级毛片免费视频观看 | 日韩视频在线免费观看 | 国产成人精品一区二区 | 露娜同人18av黄漫网站 | 在线观看免费毛片视频 | 中文在线播放 | 国产精品一区在线观看 | 在线一区观看 | 久草日韩 | 精品日韩一区 | 欧日韩免费| 日韩免费 | 岛国免费av| 情一色一乱一欲一区二区 | 成人片网址| 国产精品久久久久久久久 | 日韩综合区 | 日韩一区二区视频 | 国产综合视频在线观看 | 制服 丝袜 激情 欧洲 亚洲 | 国产精品美女www爽爽爽动态图 | 成人在线一区二区 | 国产九九精品视频 | 成人h在线 | 国产精品三级久久久久久电影 | av成人毛片 | 欧美一二三区在线 | 四虎影音| 亚洲一区二区三区观看 | 国产精品1区2区3区 国产在线观看一区 | 久久99精品久久久久久琪琪 | 国产一区二区视频在线播放 | 国产精品日产欧美久久久久 | 一区二区三区日韩 | 精品国产成人 | 国产亚洲一区二区三区在线观看 | 久久久999精品视频 欧美老妇交乱视频 | 日本天堂在线播放 | 一级欧美在线 | 欧美一区二区 | 91日韩精品一区二区三区 | 亚洲少妇视频 | 波多野结衣一区二区三区中文字幕 | 夜夜骑日日操 | 日韩午夜在线视频 | 国产精品久久久久久久美男 | 精品96久久久久久中文字幕无 | 国产又粗又长又硬又猛电影 | 精品久久亚洲 | 日本一二三视频 | 久久激情视频 | 韩国精品一区二区 | 日韩成人一区 | 日本a视频| 另类五月天| 亚洲婷婷综合网 | 欧美成在线视频 | 欧美精品久久久久 | 日韩精品一区二区三区视频播放 | 午夜爽视频 | 成人免费淫片aa视频免费 | 日产精品久久久一区二区 | 国产91亚洲精品久久久 | 午夜av影院 | 久久新 | 中文字幕成人av | 精品视频免费在线 | 黄频免费在线观看 | av7777| 欧美性网 | 中文字幕精品一区久久久久 | 欧美精品一区在线发布 | 青青草网站| 7799精品视频天天看 | 亚洲永久 | 性欧美精品高清 | 国产一区二区三区四区三区 | 精品国产一区二区三区久久久 | 免费黄看片| 久久蜜桃精品一区二区三区综合网 | 国产成人av在线播放 | 国产1区2区 | 在线色网 | a一级片在线观看 | 亚洲国产精品一区二区久久 | 91视频电影 | 超碰97人人人人人蜜桃 | 国产精品日韩在线 | 日韩精品在线视频 | 91影院| 97久久久| 国产精品久久久久久久午夜片 | 亚洲久悠悠色悠在线播放 | 久久精品国产99国产 | 欧美福利视频 | 国产成人精品一区二区三区在线 | 精品无码久久久久国产 | 久日精品 | 欧美中文 | 五月婷婷婷婷 | 一区二区影院 | 日本在线观看一区 | 三级视频在线观看 | 国产激情精品一区二区三区 | 国产二区免费 | 日本一区二区三区四区 | 久久综合电影 | 亚洲美女网站 | 欧美日韩国产一区二区在线观看 | 久久九 | 姐姐在线观看动漫第二集免费 | 日韩大尺度电影在线观看 | 欧美日韩一区精品 | 国产成人精品一区二区三区四区 | 黄色小视频在线观看 | 欧美一区在线视频 | 久久九九视频 | 在线观看成人av | 嫩草影院在线观看91麻豆 | www.788.com色淫免费 | 丁香婷婷综合激情五月色 | 日韩一区二区福利 | 亚洲成a人v欧美综合天堂麻豆 | 有码在线 | 91免费版在线看 | 亚洲国产高清在线 | 图片区 国产 欧美 另类 在线 | 国产在线二区 | 欧美一区二区三区黄 | 91免费版在线观看 | 欧美成人免费视频 | 国产精品ssss在线亚洲 | 国产av毛片 | 国产最好的精华液网站 | 日韩精品免费视频 | 亚洲精品二区 | 欧美成人一区二区三区 | 色精品| 亚洲一区电影 | 天天操天天插天天干 | 亚洲精品乱码8久久久久久日本 | 日韩超碰在线观看 | 亚洲精品二三区 | 国产精品欧美一区二区三区 | 黄色成人在线 | 亚洲欧美在线播放 | 在线观看欧美一区 | 亚洲国产成人精品女人久久久 | 午夜色视频在线观看 | 99爱在线观看 | 亚洲xx站| 黄色在线免费 | 亚洲精品乱码久久久久久 | 1204国产成人精品视频 | 欧洲免费av | 午夜日韩 | 国产精品久久久久久久久久 | 中文字幕日韩在线视频 | 五月婷婷婷婷 | 免费视频99 | 亚洲天天干 | 欧美一区二区在线观看 | 777色狠狠一区二区三区 | 在线观看免费的网站www | 欧美激情精品久久久久 | 亚洲av毛片一区二二区三三区 | 亚洲精品久久久一区二区三区 | 亚洲久久在线 | 99精品国产一区二区三区 | 精品人人 | 国产黄色av | 久久免费国产 | 丁香婷婷综合激情五月色 | 国产精品亚欧美一区二区 | 欧美日韩国产一区二区 | 黄色毛片观看 | 精品国产精品三级精品av网址 | 欧美亚洲一区 | 欧美一区国产一区 | 国产精品久久久久久久久久久久久久 | 2020亚洲视频 | 91中文字幕在线观看 | 91精品国产99久久久久久红楼 | 国产午夜精品一区二区三区 | 9999国产精品| 亚洲大尺度视频 | 国产精品一区二区不卡 | 中文字幕日韩一区二区不卡 | 精品免费国产一区二区三区四区 | 成年网站在线 | 欧美视频在线免费 | 午夜免| 成人免费视频观看视频 | 人操人人人 | 亚州国产 | 91看片在线观看 | 欧美日韩国产精品一区二区亚洲 | 三级av| 成人网电影 | 午夜电影 | 久久久久国产亚洲日本 | 国产精选一区二区三区不卡催乳 | 影视一区二区 | 国产精品久久久久久久久久妞妞 | 亚洲精品国产高清 | 日韩免费视频 | 中文字幕日韩欧美一区二区三区 | 久久久久久久久中文字幕 | 91麻豆精品国产91久久久更新资源速度超快 | 国产区一区| www.成人久久 | 天天舔日日干 | 亚洲综合色视频在线观看 | 久草视频在线播放 | 亚洲八区| 国产又粗又长又硬又猛电影 | 国产一区二区三区四 | 日韩在线播放视频 | 91超碰在线观看 | 国产福利视频在线观看 | 精品免费久久久久久久苍 | 色国产精品 | 亚洲午夜精品一区二区三区他趣 | 色先锋av资源中文字幕 | 亚洲一区成人 | 欧美精品一区二 | 思九九爱九九 | 久久高清一区 | 色视频免费在线观看 | 久久精品99国产精品日本 | 国产私拍视频 | av在线免费观看一区二区 | 在线影院av| 久久se精品一区精品二区 | 亚洲欧洲一区二区三区 | 综合99 | 欧美激情在线狂野欧美精品 | 毛片免费在线 | 国产精品久久久久久久久久久久久 | 免费在线国产 | 日本不卡免费新一二三区 | 一级免费毛片 | av网站免费 | 国产91富婆养生按摩会所 | 少妇久久久 | 91精品国产色综合久久不卡98 | 毛片av在线播放 | 国产精品一码二码三码在线 | 国产一区免费在线观看 | 成人欧美一区二区三区视频xxx | 神马午夜 | 亚洲欧美综合精品久久成人 | 久久免费视频网 | 久热精品视频 | 两性午夜视频 | www.国产精品 | 精品亚洲一区二区三区四区五区 | 人人看超碰 | 欧美日韩国产高清视频 | 99久久久免费视频 | 一区免费看 | 国产成人一区 | 日韩一二区视频 | jjzz18国产| 午夜激情影院 | 超碰高清 | 国产自产才c区 | 毛片91| 亚洲嫩草 | 国产一区二区三区在线看 | 国产精品久久久久久亚洲调教 | 国产视频一区二区 | 中文字幕成人网 | 欧美成人精品一区二区男人看 | 日韩精品久久久 | 欧美福利网 | 日韩av不卡在线 | 亚洲精品电影 | 成人在线观看中文字幕 | 亚洲精品视| 黄色网页在线观看 | 狠狠操综合网 | 欧美日韩中文在线 | 亚洲精品午夜国产va久久成人 | 国产精品69毛片高清亚洲 | 国产高清一区 | 欧美一区永久视频免费观看 | 亚洲精品一区二区三区在线 | 国产精品美女久久久久久久网站 | 午夜精品久久久久久久白皮肤 | 久国产| 中文字幕在线三区 | 精品91久久久 | 大香伊在人线免97 | 欧美xxxx色视频在线观看免费 | 欧美成人一区二区三区片免费 | 日韩在线免费观看av | 日本欧美在线 | 久久久亚洲综合 | 久久99精品国产麻豆婷婷洗澡 | 久久97视频 | 日本黄色大片免费看 | 国产精品久久久久久久 | 美女三区| 国产精品久久久久久久久久东京 | 国产成人精品免高潮在线观看 | 国产成人一区 | 精品久久一二三区 | 久久久成人精品视频 | 嫩草精品| 草草网 | 91免费国产| 久久另类ts人妖一区二区 | 欧美黑人一级爽快片淫片高清 | 一区二区免费在线播放 | 国产视频一区二区 | 国产伦精品一区二区三区四区视频 | 国产成人一区二区三区 | 久久成人国产精品 | 午夜精品久久久久久久久久久久久 | 天天艹逼 | 日韩在线播放一区 | 国产成人福利在线 | 91精品国产乱码久久久久久久久 | 国产看片网站 | 欧美一区二区三区精品免费 | 一区二区三区国产视频 | 日韩精品久久久久久 | 伊人久久精品久久亚洲一区 | 99久久精品免费看国产四区 | 美女视频黄又黄又免费 | 欧美日韩国产综合在线 | 亚洲国产成人一区二区精品区 | 中国妞videos高潮 | 天天天干干干 | 午夜精品福利在线观看 | 中文字幕乱码亚洲精品一区 | 久久久影视 | 成人激情视频在线观看 | 日韩视频www | 毛片免费看 | 亚洲精品乱码久久久久久国产主播 | 国产精品久久嫩一区二区免费 | www.国产精品 | 国产妇女乱码一区二区三区 | 亚洲无吗视频 | 在线视频成人永久免费 | 亚洲成人日韩 | 91视频.com| 亚洲高清资源 | 亚洲aⅴ天堂av在线电影软件 | 日韩欧美三区 | 黄色免费高清视频 | 国产精品成人国产乱一区 | 久久久久久网站 | 日本一区二区三区四区不卡视频 | 看特级毛片 | 毛片网络 | 成人免费视屏 | 99久久免费视频在线观看 | 九一视频在线播放 | 伊人av成人 | 亚洲成人久久久 | www久久99| 欧美一级在线观看视频 | 欧美日韩专区 | 久草新 | 欧美成人精品一区二区三区 | 日韩视频在线观看一区 | 精品乱子伦一区二区三区 | 精品伊人 | 91 久久| 日本黄网站在线观看 | 欧美日韩在线观看一区二区三区 | 国内精品久久久久国产 | 国产精品久久久久久av公交车 | 又黄又爽的网站 | 日韩一及片 | 日韩成人在线观看 | 亚洲精品乱码久久久久久不卡 | 一区二区三区四区在线播放 | 2018狠狠干 | 久久久免费视频播放 | 日韩三级 | 亚洲国产成人av好男人在线观看 | 国产精品丝袜视频 | av国产精品 | 一本大道综合伊人精品热热 | 亚洲久视频| 日韩一区二区中文字幕 | 久久精品网 | av在线官网 | 国产欧美日韩综合精品一区二区 | 久久精品国产一区 | www日本在线 | 欧美精品日韩 | 黄色直接看 | 91精品国产综合久久福利软件 | 久久久久久亚洲 | 日本中文字幕一区二区 | 日韩一区二区三区在线 | 国产欧美日韩精品一区二区三区 | 日韩在线成人av | 精品在线看 | 久久久久久久久久穴 | 欧洲成人午夜免费大片 | 色婷婷网| 成人 在线 | 成人免费视频一区二区 | 成人网18免费网站 | 精品国产区 | 午夜网| 精品一区二区三区中文字幕 | 手机看片在线 | 精品久久一区二区三区 | 久久精品国产免费 | 久久综合狠狠综合久久 | 山岸逢花在线 | 99视频免费在线观看 | 91亚洲国产成人久久精品网站 | 一级黄色片a级 | 精品国产91 |