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

Spring事務(wù)失效的九大場景,你踩過幾個(gè)?

開發(fā) 前端
本文簡要闡述了 Spring 事務(wù)的實(shí)現(xiàn)原理,并列出了 9 種 Spring 事務(wù)失效的場景。相信很多朋友可能都遇到過這些問題。文章也詳細(xì)解釋了失效的原因,希望大家對(duì) Spring 事務(wù)有新的理解。

前言

在日常開發(fā)中,我們經(jīng)常使用Spring事務(wù)。最近,一個(gè)朋友去面試,被問到了這樣一個(gè)面試題:在什么情況下,Spring 事務(wù)會(huì)失效?

今天,我將和大家聊聊Spring事務(wù)失效的 9 種場景。

1. 拋出檢查異常(checked exceptions)

例如,你的事務(wù)控制代碼如下:

@Transactional
public void transactionTest() throws IOException {
    User user = new User();
    UserService.insert(user);
    throw new IOException();
}

如果沒有特別指定@Transactional,Spring 默認(rèn)只會(huì)在遇到運(yùn)行時(shí)異常RuntimeException或錯(cuò)誤時(shí)回滾,而檢查異常如IOException不會(huì)觸發(fā)回滾。

public boolean rollbackOn(Throwable ex) {
    return (ex instanceof RuntimeException || ex instanceof Error);
}

解決方案:

知道原因后,解決方案也很簡單。配置rollbackFor屬性,例如:@Transactional(rollbackFor = Exception.class)

@Transactional(rollbackFor = Exception.class)
public void transactionTest() throws IOException {
    User user = new User();
    UserService.insert(user);
    throw new IOException();
}

2. 業(yè)務(wù)方法本身捕獲并處理了異常

@Transactional(rollbackFor = Exception.class)
public void transactionTest() {
    try {
        User user = new User();
        UserService.insert(user);
        int i = 1 / 0;
    } catch (Exception e) {
        e.printStackTrace();
    }
}

在這個(gè)場景中,事務(wù)失效的原因也很簡單。Spring 是否回滾事務(wù)取決于你是否拋出了異常。如果你自己捕獲了異常,Spring 就無法處理事務(wù)了。

看了上面的代碼,你可能會(huì)覺得這么簡單的問題,自己不可能犯這種低級(jí)錯(cuò)誤。但我想告訴你,我身邊幾乎有一半的人都曾因此困擾過。

在編寫業(yè)務(wù)代碼時(shí),代碼可能會(huì)更復(fù)雜,有很多嵌套的方法。稍不注意,就很容易觸發(fā)這個(gè)問題。舉個(gè)簡單的例子,假設(shè)你有一個(gè)審計(jì)功能,每次方法執(zhí)行完后,將審計(jì)結(jié)果保存到數(shù)據(jù)庫中。那么代碼可能會(huì)寫成這樣:

@Service
public class TransactionService {
    @Transactional(rollbackFor = Exception.class)
    public void transactionTest() throws IOException {
        User user = new User();
        UserService.insert(user);
        throw new IOException();
    }
}

下面的切面會(huì)作用于TransactionService

@Component
publicclass AuditAspect {
    @Autowired
    private AuditService auditService;

    @Around(value = "execution (* com.dylan.service.*.*(..))")
    public Object around(ProceedingJoinPoint pjp) {
        try {
            Audit audit = new Audit();
            Signature signature = pjp.getSignature();
            MethodSignature methodSignature = (MethodSignature) signature;
            String[] strings = methodSignature.getParameterNames();
            audit.setMethod(signature.getName());
            audit.setParameters(strings);
            Object proceed = pjp.proceed();
            audit.success(true);
            return proceed;
        } catch (Throwable e) {
            log.error("{}", e);
            audit.success(false);
        }
        auditService.save(audit);
        returnnull;
    }
}

在上面的例子中,如果程序執(zhí)行異常,事務(wù)也會(huì)失效。原因是Spring的事務(wù)切面優(yōu)先級(jí)最低。如果異常被切面捕獲,Spring 自然無法正確處理事務(wù),因?yàn)槭聞?wù)管理器無法捕獲到異常。

解決方案:

只需移除try-catch。雖然我們知道在處理事務(wù)時(shí),業(yè)務(wù)代碼不能自己捕獲異常,但只要代碼變得復(fù)雜,我們很容易不小心犯錯(cuò)。

3. 同一個(gè)類中的方法調(diào)用

@Service
publicclass DefaultTransactionService implements Service {

    public void saveUser() throws Exception {
        // do something
        doInsert();
    }

    @Transactional(rollbackFor = Exception.class)
    public void doInsert() throws IOException {
        User user = new User();
        UserService.insert(user);
        thrownew IOException();
    }
}

這也是一個(gè)容易出錯(cuò)的場景。事務(wù)失效的原因也很簡單。因?yàn)?Spring 的事務(wù)管理功能是通過動(dòng)態(tài)代理實(shí)現(xiàn)的,而 Spring 默認(rèn)使用 JDK 動(dòng)態(tài)代理,JDK 動(dòng)態(tài)代理通過接口實(shí)現(xiàn),并通過反射調(diào)用目標(biāo)類。簡單理解,在saveUser()方法中,調(diào)用this.doInsert()時(shí),this是真實(shí)對(duì)象,因此會(huì)直接執(zhí)行doInsert的業(yè)務(wù)邏輯,而不是代理邏輯,從而導(dǎo)致事務(wù)失效。

解決方案:

方案 1:直接在saveUser方法上添加@Transactional注解。

方案 2:可以將這兩個(gè)方法拆分到不同的類中。

方案 3:不使用注解實(shí)現(xiàn)事務(wù),而是使用編程式事務(wù)來包裹需要開啟事務(wù)的代碼塊。例如:transactionTemplate.execute()

public void doInsert() throws IOException {
    transactionTemplate.execute(() -> {
        User user = new User();
        UserService.insert(user);
        throw new IOException();
    });
}

4. 方法使用了finalstatic關(guān)鍵字

如果 Spring 使用 Cglib 代理實(shí)現(xiàn)(當(dāng)你的代理類沒有實(shí)現(xiàn)接口時(shí)),而你的業(yè)務(wù)方法恰好使用了finalstatic關(guān)鍵字,那么事務(wù)控制也會(huì)失效。因?yàn)?Cglib 使用字節(jié)碼增強(qiáng)技術(shù)生成被代理類的子類,并重寫被代理類的方法來實(shí)現(xiàn)代理。如果被代理的方法使用了finalstatic關(guān)鍵字,子類就無法重寫被代理的方法。

如果 Spring 使用 JDK 動(dòng)態(tài)代理實(shí)現(xiàn),JDK 動(dòng)態(tài)代理是基于接口實(shí)現(xiàn)的,那么被finalstatic修飾的方法也無法被代理。

總之,如果方法連代理都沒有,那么事務(wù)回滾肯定無法實(shí)現(xiàn)。

解決方案:

盡量移除方法上的finalstatic關(guān)鍵字。

5. 方法不是public

如果方法不是public,Spring 事務(wù)也會(huì)失效,因?yàn)樵?Spring 事務(wù)管理的源碼AbstractFallbackTransactionAttributeSource中,computeTransactionAttribute()方法會(huì)判斷目標(biāo)方法是否是public。如果不是public,則返回null

// Don't allow no-public methods as required.
if (allowPublicMethodsOnly() && !Modifier.isPublic(method.getModifiers())) {
    return null;
}

解決方案:

將當(dāng)前方法的訪問級(jí)別改為public

6. 傳播機(jī)制使用不當(dāng)

Spring事務(wù)的傳播機(jī)制指的是當(dāng)多個(gè)事務(wù)方法相互調(diào)用時(shí),事務(wù)應(yīng)該如何傳播的策略。Spring提供了七種事務(wù)傳播機(jī)制:REQUIREDSUPPORTSMANDATORYREQUIRES_NEWNOT_SUPPORTEDNEVERNESTED。如果你不了解這些傳播策略的原理,很容易導(dǎo)致事務(wù)失效。

@Service
publicclass TransactionsService {

    @Autowired
    private UserMapper userMapper;

    @Autowired
    private AddressMapper addressMapper;

    @Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor = Exception.class)
    public void doInsert(User user, Address address) throws Exception {
        // do something
        userMapper.insert(user);
        saveAddress(address);
    }

    @Transactional(propagation = Propagation.REQUIRES_NEW)
    public void saveAddress(Address address) {
        // do something
        addressMapper.insert(address);
    }
}

在上面的例子中,如果用戶插入失敗,不會(huì)導(dǎo)致saveAddress()回滾,因?yàn)檫@里使用的傳播機(jī)制是REQUIRES_NEWREQUIRES_NEW的原理是,如果當(dāng)前方法沒有事務(wù),則創(chuàng)建一個(gè)新事務(wù)。如果當(dāng)前方法已經(jīng)有事務(wù),則掛起當(dāng)前事務(wù)并創(chuàng)建一個(gè)新事務(wù)。父事務(wù)會(huì)等到當(dāng)前事務(wù)完成后才提交。如果父事務(wù)發(fā)生異常,不會(huì)影響子事務(wù)的提交。

解決方案:

將事務(wù)傳播策略改為默認(rèn)值REQUIREDREQUIRED的原理是,如果當(dāng)前有事務(wù),則加入該事務(wù)。如果沒有事務(wù),則創(chuàng)建一個(gè)新事務(wù)。父事務(wù)和被調(diào)用的事務(wù)處于同一個(gè)事務(wù)中。即使被調(diào)用的事務(wù)捕獲了異常,整個(gè)事務(wù)仍然會(huì)回滾。

7. 沒有被 Spring 管理

// @Service
public class OrderServiceImpl implements OrderService {
    @Transactional
    public void updateOrder(Order order) {
        // update order
    }
}

如果此時(shí)@Service注解被注釋掉,這個(gè)類就不會(huì)被 Spring 加載為 Bean,那么這個(gè)類就不會(huì)被 Spring 管理,事務(wù)自然也會(huì)失效。

解決方案:

確保每個(gè)使用事務(wù)注解的Service都被 Spring 管理。

8. 多線程調(diào)用

@Service
publicclass UserService {

    @Autowired
    private UserMapper userMapper;
    @Autowired
    private RoleService roleService;

    @Transactional
    public void add(UserModel userModel) throws Exception {
        userMapper.insertUser(userModel);
        new Thread(() -> {
            try {
                test();
            } catch (Exception e) {
                roleService.doOtherThing();
            }
        }).start();
    }
}

@Service
publicclass RoleService {

    @Transactional
    public void doOtherThing() {
        try {
            int i = 1 / 0;
            System.out.println("save role table data");
        } catch (Exception e) {
            thrownew RuntimeException();
        }
    }
}

我們可以看到,在事務(wù)方法add中,調(diào)用了事務(wù)方法doOtherThing,但doOtherThing是在另一個(gè)線程中被調(diào)用的。

這會(huì)導(dǎo)致兩個(gè)方法不在同一個(gè)線程中,獲取的數(shù)據(jù)庫連接也不同,因此是兩個(gè)不同的事務(wù)。如果在doOtherThing方法中拋出異常,add方法是不可能回滾的。

我們所說的同一個(gè)事務(wù),實(shí)際上指的是同一個(gè)數(shù)據(jù)庫連接。只有在同一個(gè)數(shù)據(jù)庫連接下,才能同時(shí)提交和回滾。如果在不同的線程中,獲取的數(shù)據(jù)庫連接肯定不同,因此它們是不同的事務(wù)。

解決方案:

這有點(diǎn)像分布式事務(wù)。盡量確保在同一個(gè)事務(wù)中處理。

9. 沒有配置開啟事務(wù)

如果在項(xiàng)目中沒有配置 Spring 的事務(wù)管理器,即使使用了 Spring 的事務(wù)管理功能,Spring 的事務(wù)也不會(huì)生效。例如,如果你是一個(gè) Spring Boot 項(xiàng)目,并且沒有在 Spring Boot 項(xiàng)目中配置以下代碼:

@EnableTransactionManagement

解決方案:

確保在項(xiàng)目中正確配置了事務(wù)管理器。

總結(jié)

本文簡要闡述了 Spring 事務(wù)的實(shí)現(xiàn)原理,并列出了 9 種 Spring 事務(wù)失效的場景。相信很多朋友可能都遇到過這些問題。文章也詳細(xì)解釋了失效的原因,希望大家對(duì) Spring 事務(wù)有新的理解。

責(zé)任編輯:武曉燕 來源: 程序猿技術(shù)充電站
相關(guān)推薦

2022-04-26 21:49:55

Spring事務(wù)數(shù)據(jù)庫

2024-04-01 08:05:27

Go開發(fā)Java

2022-02-14 16:53:57

Spring項(xiàng)目數(shù)據(jù)庫

2022-09-29 09:35:56

線程池

2019-08-09 15:03:53

2018-09-11 09:14:52

面試公司缺點(diǎn)

2025-04-29 10:17:42

2019-09-25 15:30:15

2024-09-09 08:29:25

2024-01-29 08:28:01

Spring事務(wù)失效

2024-05-07 08:23:03

Spring@Async配置

2025-04-15 02:00:00

API版本項(xiàng)目

2021-09-04 07:56:44

Spring事務(wù)失效

2021-12-13 11:12:41

Spring事務(wù)失效

2025-10-30 07:45:06

2025-08-06 00:00:01

事務(wù)失效聲明式

2023-07-05 08:45:18

Spring事務(wù)失效場景

2021-01-21 14:07:24

區(qū)塊鏈行業(yè)發(fā)展物聯(lián)網(wǎng)

2023-08-29 10:51:44

2025-01-20 09:00:00

架構(gòu)開發(fā)代碼
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

特级特黄刘亦菲aaa级| 免费观看黄色的网站| 天天综合天天干| 国产欧美日韩一区二区三区四区| 欧美日韩综合一区| 欧美 日韩 国产 在线观看| 不卡av中文字幕| 新狼窝色av性久久久久久| 一区二区三区久久精品| 日本中文字幕在线不卡| 在线女人免费视频| 自拍偷拍亚洲欧美日韩| 久99久在线| 国产精品爽爽久久久久久| 亚洲人成人一区二区三区| 在线日韩中文字幕| 中文字幕人妻熟女人妻a片| 国产欧美一区二区三区精品酒店| 亚洲欧洲精品天堂一级| 久久综合中文色婷婷| 国产女人高潮时对白| 国产精品外国| 欧美巨乳在线观看| 超薄肉色丝袜一二三| 中文一区二区三区四区| 欧美日韩一区二区在线观看视频 | 国产在线日本| 国产成人一级电影| 国产啪精品视频| 久久国产视频精品| 欧美午夜电影在线观看| 色99之美女主播在线视频| 国产夫妻性爱视频| av动漫精品一区二区| 欧美一区二区三区视频免费| 天天干天天综合| xxxxxx欧美| 图片区小说区国产精品视频| 亚洲高潮无码久久| 1区2区3区在线观看| 91在线观看视频| 国产精品日韩欧美一区二区| av一级黄色片| 国产在线精品一区二区| 国产日本欧美视频| 伊人久久成人网| 日本色综合中文字幕| 欧美专区日韩视频| 天天综合网入口| 在线播放一区| 97欧美精品一区二区三区| 国产午夜福利片| 国产精品红桃| 精品中文字幕视频| 久久久久久久久久久97| 欧美色图麻豆| 久久久久久中文| 精品无码免费视频| 一区在线视频观看| 91精品国产91| 国产精品suv一区| 免费在线播放第一区高清av| 欧美中文字幕视频在线观看| 精品久久久久久久久久久国产字幕| 99精品视频免费观看视频| 亚洲**2019国产| 色婷婷av国产精品| 国产精品免费看| 日韩免费精品视频| 在线观看国产精品入口男同| 久久精品国产999大香线蕉| 国产精品亚洲第一区| 一区二区日韩在线观看| 国产精品一级黄| 精品日本一线二线三线不卡| 污免费在线观看| 视频一区中文字幕精品| 亚洲精品在线观| 妞干网在线免费视频| 色婷婷综合久久久中字幕精品久久| 色婷婷精品久久二区二区蜜臀av| www.com黄色片| 嫩呦国产一区二区三区av| 精品黑人一区二区三区久久 | 秋霞av一区二区三区| 欧美aaa在线| 999国产在线| 水中色av综合| 中文字幕日韩精品一区 | www成人啪啪18软件| 亚洲久久久久| 98精品国产高清在线xxxx天堂| 国产一级免费视频| 国模娜娜一区二区三区| 激情小说综合区| 91吃瓜网在线观看| 亚洲综合激情另类小说区| 无码播放一区二区三区| 成人黄页网站视频| 亚洲成av人片在线观看香蕉| a资源在线观看| 在线观看日韩av电影| 国产精品久久久久久久久久久久久久| 国产欧美久久久| 久久婷婷一区二区三区| 一区二区三区四区国产| 男人久久天堂| 日韩一区二区免费高清| 国精产品一区一区三区免费视频 | 久久综合久久综合久久综合| 男女啪啪的视频| 一区一区三区| 精品精品欲导航| 极品色av影院| 久久中文欧美| 国产精品久久久久久免费观看 | 日本一区二区免费在线 | 欧美激情精品久久久久久免费| 一区二区视频欧美| 91色视频在线观看| 成人影视在线播放| 精品毛片三在线观看| 日韩久久久久久久久久久| 全球成人免费直播| 欧美一区第一页| 亚洲免费黄色片| 亚洲男人的天堂av| 鲁一鲁一鲁一鲁一av| 亚洲视频分类| 欧美一级大片视频| 好吊视频一二三区| 亚洲欧美一区二区三区久本道91| 欧美亚洲国产免费| 国产激情在线播放| 精品国精品国产| 欧美卡一卡二卡三| 久久99国产精品麻豆| 日韩精品电影网站| 成人免费网站视频| 亚洲男女性事视频| 国产成人亚洲精品自产在线| 处破女av一区二区| 国产传媒久久久| 日韩中文字幕无砖| 九九热在线精品视频| 国产a级免费视频| 亚洲卡通动漫在线| 亚洲一区二区中文字幕在线观看| 久久精品欧美一区| 亚洲一区二区少妇| av网站免费在线观看| 91精品国产91久久综合桃花| 天天色天天综合| 激情小说亚洲一区| 99re99热| 福利在线一区| 91av视频在线播放| 国产小视频福利在线| 欧美日韩中字一区| 国产麻豆a毛片| 国产一区中文字幕| 精品视频在线观看一区二区| 超碰成人免费| 午夜精品一区二区三区在线视| 天堂在线资源8| 91国偷自产一区二区开放时间| 美女洗澡无遮挡| 免费成人av资源网| 青青视频免费在线观看| 亚洲一区二区三区免费| 91精品国产91久久久久| 国产综合在线观看| 这里只有精品99re| 国产在线观看免费av| 99热国产精品| 性刺激的欧美三级视频| 综合一区av| 久久综合九色综合网站| 免费成人高清在线视频| 欧美激情一级二级| 青青草视频在线观看| 欧美三级视频在线| 成人免费毛片东京热| 97se亚洲国产综合自在线不卡 | 午夜影院在线播放| 日韩在线视频中文字幕| 高h放荡受浪受bl| 欧美专区日韩专区| 欧美人妻一区二区| 久久精品亚洲精品国产欧美| 国产精品久久久久久久av福利| 一区二区视频欧美| 亚洲一区二区在| 丁香五月缴情综合网| 国产精品久久久久久久久久久久| 影音先锋男人在线资源| 亚洲欧美国产视频| 国内精品偷拍视频| 在线日韩av片| 日韩aaaaaa| 最新日韩av在线| 亚洲av无码一区二区二三区| 国产一区二区三区国产| 北条麻妃在线一区| 在线欧美视频| 一区二区三区日韩视频| 天堂av一区二区三区在线播放| 成人黄色在线观看| 欧美激情喷水| 欧美激情一二三| 精品176二区| 亚洲欧洲视频在线| 色网站免费观看| 欧美一区二区三区男人的天堂| 手机av免费观看| 亚洲v日本v欧美v久久精品| 亚洲精品自拍视频在线观看| 久久日韩粉嫩一区二区三区 | 久久免费国产精品| 国内自拍偷拍视频| 国内精品久久久久影院一蜜桃| 男人透女人免费视频| 亚洲黄色大片| 成人国产在线看| 国产精品不卡| 亚洲韩国在线| 日韩精品影视| 欧美日韩精品免费在线观看视频| 国产精品99久久免费观看| 2014亚洲精品| 亚洲精品大片| 国产剧情日韩欧美| 99精品国自产在线| 国产精品久久av| 视频在线日韩| 国产精品久久久久久久久久尿| 精品国产第一福利网站| 欧美中文在线视频| 在线中文字幕播放| 欧美一区二区三区艳史| 日韩伦理在线一区| 欧美一级大片视频| 在线观看欧美日韩电影| 欧美性受xxx| 性国裸体高清亚洲| 欧美性视频精品| 欧美激情喷水| 国产精品久久久久久久久粉嫩av | 2020国产精品久久精品不卡| japansex久久高清精品| 成人黄色在线观看| 激情五月综合婷婷| av成人观看| jizz18欧美18| 久久精品99久久| 亚洲制服一区| 亚洲丰满在线| 一区二区三区四区在线观看国产日韩| 综合国产精品久久久| 影视亚洲一区二区三区| 日本免费a视频| 在线亚洲激情| 午夜激情福利在线| 美女网站色91| av在线免费观看不卡| 成人黄色av电影| 男人天堂av电影| 国产精品水嫩水嫩| 岛国毛片在线观看| 亚洲va国产天堂va久久en| 国产www在线| 欧美性感一区二区三区| 国产男女无套免费网站| 亚洲福利视频在线| 国产三级在线观看| 久久久精品久久| 538在线观看| 国产成人精品av在线| 婷婷久久免费视频| 国产成人av一区二区三区| 性人久久久久| 自拍偷拍99| 国产精品综合色区在线观看| 国产又猛又黄的视频| 国产精品夜夜嗨| 中文字幕被公侵犯的漂亮人妻| 中文字幕亚洲成人| 久久精品美女视频| 欧美亚洲禁片免费| 亚洲精选一区二区三区| 国产一区二区三区精品久久久| 3d玉蒲团在线观看| 国产999精品| 日韩三级网址| 色大师av一区二区三区| 国产一区激情| 五月婷婷六月合| 99精品视频在线播放观看| 天堂а√在线中文在线鲁大师| 亚洲成人福利片| 国产精品视频无码| 亚洲欧美日韩第一区| 一区二区三区伦理| 国产成人精品a视频一区www| 99re8这里有精品热视频免费 | 91久久久久久久久久久久久| 伦理一区二区| 可以在线看黄的网站| 丝袜诱惑亚洲看片| 日本50路肥熟bbw| 中文字幕中文字幕中文字幕亚洲无线| 日韩精品一区二区三| 欧美丰满美乳xxx高潮www| 欧美三级韩国三级日本三斤在线观看| 91久久奴性调教| 人妻妺妺窝人体色www聚色窝 | 黄色aa久久| a级国产乱理论片在线观看99| 精品久久视频| 欧美韩国日本在线| 99精品久久99久久久久| 国产一级aa大片毛片| 91精品一区二区三区在线观看| 国产美女视频一区二区三区 | 99久久er热在这里只有精品15| 综合五月激情网| 欧美精品久久一区| 成人影视在线播放| 日本三级韩国三级久久| 奇米777国产一区国产二区| 女人被男人躁得好爽免费视频| 国产制服丝袜一区| 欧美a级片免费看| 欧美日韩免费高清一区色橹橹| 国产精品影院在线| 国产成人精品在线播放| 你懂的视频欧美| 一本大道熟女人妻中文字幕在线 | 国产伦精品一区二区三毛| 欧美+日本+国产+在线a∨观看| 日日干夜夜操s8| 国产精品久久久久久久久久久免费看 | 色999日韩国产欧美一区二区| 五月婷婷六月丁香综合| 91精品国产高清| 亚洲黄色录像| 国产一级不卡毛片| 日本一区二区三区在线观看| 国产精品无码粉嫩小泬| 中文字幕综合在线| 在线三级电影| 亚洲自拍偷拍福利| 欧美激情成人在线| 精人妻一区二区三区| 亚洲影院免费观看| 天堂av一区二区三区| 国产69久久精品成人| 中国av一区| 视频二区在线播放| 日韩一区欧美小说| a级片免费观看| 午夜精品久久久久久久久久久久久| 群体交乱之放荡娇妻一区二区 | 波多野结衣亚洲| 日本不卡二区高清三区| 另类小说综合欧美亚洲| 加勒比婷婷色综合久久| 亚洲第一综合天堂另类专| 丁香六月综合| 伊人色综合久久天天五月婷| 国产精品一区不卡| 日韩精品在线免费看| 亚洲欧美日韩网| 婷婷成人av| 国产精品专区在线| 国产欧美日韩在线看| 久久精品综合一区| 91视频久久久| 丝袜亚洲另类欧美重口| 91综合精品国产丝袜长腿久久| 可以在线看的av网站| 欧美国产在线观看| 亚洲AV无码成人片在线观看| 5566日本婷婷色中文字幕97| 成人羞羞动漫| 精品久久久久久无码人妻| 色悠久久久久综合欧美99| 国产在线观看a| 久久久久久欧美精品色一二三四 | gogogo高清免费观看在线视频| 樱桃视频在线观看一区| 免费在线国产| 亚洲伊人久久综合| 久久99伊人| 精品自拍偷拍视频| 亚洲欧洲自拍偷拍| 国产精品一区二区中文字幕| 国产精品乱码久久久久| 亚洲一级二级在线| 五月香视频在线观看|