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

美團二面:Spring事務不生效的15種場景

開發 前端
注解為事務范圍的方法中,事務的回滾僅僅對于unchecked的異常有效。對于checked異常無效。也就是說事務回滾僅僅發生在,出現RuntimeException或Error的時候。通俗一點就是:代碼中出現的空指針等異常,會被回滾。而文件讀寫、網絡超時問題等,spring就沒法回滾了。

前言

大家好,我是田螺。

日常開發中,我們經常使用到spring事務。最近星球一位還有去美團面試,被問了這么一道面試題: Spring 事務在哪幾種情況下會不生效? 今天田螺哥跟大家聊聊,spring事務不生效的15種場景。

圖片

1. 你的service類沒有被Spring管理

//@Service (注釋了@Service)
public class TianLuoServiceImpl implements TianLuoService {

@Autowired
private TianLuoMapper tianLuoMapper;

@Autowired
private TianLuoFlowMapper tianLuoFlowMapper;

@Transactional
public void addTianLuo(TianLuo tianluo) {
//保存tianluo實體數據庫記錄
tianLuoMapper.save(tianluo);
//保存tianluo流水數據庫記錄
tianLuoFlowMapper.saveFlow(buildFlowByTianLuo(tianluo));
}
}
  • 事務不生效的原因:上面例子中, @Service注解注釋之后,spring事務(@Transactional)沒有生效,因為Spring事務是由AOP機制實現的,也就是說從Spring IOC容器獲取bean時,Spring會為目標類創建代理,來支持事務的。但是@Service被注釋后,你的service類都不是spring管理的,那怎么創建代理類來支持事務呢。
  • 解決方案:加上@Service注解。

2.沒有在Spring配置文件中啟用事務管理器

@Configuration
public class AppConfig {
// 沒有配置事務管理器
}

@Service
public class MyService {
@Transactional
public void doSomething() {
// ...
}
}
  • 事務不生效的原因:沒有在AppConfig中配置事務管理器,因此Spring無法創建事務代理對象,導致事務不生效。即使在MyService中添加了@Transactional注解,該方法也不會被Spring管理的事務代理攔截。
  • 解決方案:為了解決這個問題,應該在AppConfig中配置一個事務管器。例如:
@Configuration
public class AppConfig {
@Bean
public PlatformTransactionManager transactionManager() {
return new DataSourceTransactionManager(dataSource());
}
}

@Service
public class MyService {
@Transactional
public void doSomething() {
// ...
}
}

如果是Spring Boot項目,它默認會自動配置事務管理器并開啟事務支持。

3. 事務方法被final、static關鍵字修飾

@Service
public class TianLuoServiceImpl {

@Autowired
private TianLuoMapper tianLuoMapper;

@Autowired
private TianLuoFlowMapper tianLuoFlowMapper;

@Transactional
public final void addTianLuo(TianLuo tianluo) {
//保存tianluo實體數據庫記錄
tianLuoMapper.save(tianluo);
//保存tianluo流水數據庫記錄
tianLuoFlowMapper.saveFlow(buildFlowByTianLuo(tianluo));
}
}
  • 事務不生效的原因:如果一個方法被聲明為final或者static,則該方法不能被子類重寫,也就是說無法在該方法上進行動態代理,這會導致Spring無法生成事務代理對象來管理事務。
  • 解決方案:addTianLuo事務方法不要用final修飾或者static修飾。

4. 同一個類中,方法內部調用

@Service
public class TianLuoServiceImpl implements TianLuoService {

@Autowired
private TianLuoMapper tianLuoMapper;

@Autowired
private TianLuoFlowMapper tianLuoFlowMapper;

public void addTianLuo(TianLuo tianluo){
// 調用內部的事務方法
this.executeAddTianLuo(tianluo);
}

@Transactional
public void executeAddTianLuo(TianLuo tianluo) {
tianLuoMapper.save(tianluo);
tianLuoFlowMapper.saveFlow(buildFlowByTianLuo(tianluo));
}
}
  • 事務不生效的原因: 事務是通過Spring AOP代理來實現的,而在同一個類中,一個方法調用另一個方法時,調用方法直接調用目標方法的代碼,而不是通過代理類進行調用。即以上代碼,調用目標executeAddTianLuo方法不是通過代理類進行的,因此事務不生效。
  • 解決方案:可以新建多一個類,讓這兩個方法分開,分別在不同的類中。如下:
@Service
public class TianLuoExecuteServiceImpl implements TianLuoExecuteService {

@Autowired
private TianLuoMapper tianLuoMapper;
@Autowired
private TianLuoFlowMapper tianLuoFlowMapper;

@Transactional
public void executeAddTianLuo(TianLuo tianluo) {
tianLuoMapper.save(tianluo);
tianLuoFlowMapper.saveFlow(buildFlowByTianLuo(tianluo));
}
}

@Service
public class TianLuoAddServiceImpl implements TianLuoAddService {

@Autowired
private TianLuoExecuteService tianLuoExecuteService;

public void addTianLuo(User user){
tianLuoExecuteService.executeAddTianLuo(user);
}
}

當然,有時候你也可以在該 Service 類中注入自己,或者通過AopContext.currentProxy()獲取代理對象。

5.方法的訪問權限不是public

@Service
public class TianLuoServiceImpl implements TianLuoService {

@Autowired
private TianLuoMapper tianLuoMapper;

@Autowired
private TianLuoFlowMapper tianLuoFlowMapper;

@Transactional
private void addTianLuo(TianLuo tianluo) {
tianLuoMapper.save(tianluo);
tianLuoFlowMapper.saveFlow(buildFlowByTianLuo(tianluo));
}
}
  • 事務不生效的原因:spring事務方法addTianLuo的訪問權限不是public,所以事務就不生效啦,因為Spring事務是由AOP機制實現的,AOP機制的本質就是動態代理,而代理的事務方法不是public的話,computeTransactionAttribute()就會返回null,也就是這時事務屬性不存在了。大家可以看下AbstractFallbackTransactionAttributeSource的源碼:

圖片

  • 解決方案:addTianLuo事務方法的訪問權限修改為public。

6. 數據庫的存儲引擎不支持事務

Spring事務的底層,還是依賴于數據庫本身的事務支持。在MySQL中,MyISAM存儲引擎是不支持事務的,InnoDB引擎才支持事務。因此開發階段設計表的時候,確認你的選擇的存儲引擎是支持事務的。

圖片

7 .配置錯誤的 @Transactional 注解

@Transactional(readOnly = true)
public void updateUser(User user) {
userDao.updateUser(user);
}
  • 事務不生效的原因:雖然使用了@Transactional注解,但是注解中的readOnly=true屬性指示這是一個只讀事務,因此在更新User實體時會拋出異常。
  • 解決方案:將readOnly屬性設置為false,或者移除了@Transactional注解中的readOnly屬性。

8.事務超時時間設置過短

@Transactional(timeout = 1)
public void doSomething() {
//...
}
  • 事務不生效的原因:在上面的例子中,timeout屬性被設置為1秒,這意味著如果事務在1 秒內無法完成,則報事務超時了。

9. 使用了錯誤的事務傳播機制

@Service
public class TianLuoServiceImpl {

@Autowired
private TianLuoMapper tianLuoMapper;
@Autowired
private TianLuoFlowMapper tianLuoFlowMapper;

@Transactional(propagation = Propagation.NOT_SUPPORTED)
public void doInsertTianluo(TianLuo tianluo) throws Exception {
tianLuoMapper.save(tianluo);
tianLuoFlowMapper.saveFlow(buildFlowByTianLuo(tianluo));
}
}
  • 事務不生效的原因:Propagation.NOT_SUPPORTED傳播特性不支持事務。
  • 解決方案:選擇正確的事務傳播機制。

幫大家復習一下,Spring提供了七種事務傳播機制。它們分別是:

  • REQUIRED(默認):如果當前存在一個事務,則加入該事務;否則,創建一個新事務。該傳播級別表示方法必須在事務中執行。
  • SUPPORTS:如果當前存在一個事務,則加入該事務;否則,以非事務的方式繼續執行。
  • MANDATORY:如果當前存在一個事務,則加入該事務;否則,拋出異常。
  • REQUIRES_NEW:創建一個新的事務,并且如果存在一個事務,則將該事務掛起。
  • NOT_SUPPORTED:以非事務方式執行操作,如果當前存在一個事務,則將該事務掛起。
  • NEVER:以非事務方式執行操作,如果當前存在一個事務,則拋出異常。
  • NESTED:如果當前存在一個事務,則在嵌套事務內執行。如果沒有事務,則按REQUIRED傳播級別執行。嵌套事務是外部事務的一部分,可以在外部事務提交或回滾時部分提交或回滾。

10. rollbackFor屬性配置錯誤

@Service
public class TianLuoServiceImpl implements TianLuoService {

@Autowired
private TianLuoMapper tianLuoMapper;

@Autowired
private TianLuoFlowMapper tianLuoFlowMapper;

@Transactional(rollbackFor = Error.class)
public void addTianLuo(TianLuo tianluo) {
//保存tianluo數據庫記錄
tianLuoMapper.save(tianluo);
//保存tianluo流水數據庫記錄
tianLuoFlowMapper.saveFlow(tianluo);
//模擬異常拋出
throw new Exception();
}
}
  • 事務不生效的原因: 其實rollbackFor屬性指定的異常必須是Throwable或者其子類。默認情況下,RuntimeException和Error兩種異常都是會自動回滾的。但是因為以上的代碼例子,指定了rollbackFor = Error.class,但是拋出的異常又是Exception,而Exception和Error沒有任何什么繼承關系,因此事務就不生效。

圖片

大家可以看一下Transactional注解源碼哈:

圖片

  • 解決方案:rollbackFor屬性指定的異常與拋出的異常匹配。

11.事務注解被覆蓋導致事務失效

public interface MyRepository {
@Transactional
void save(String data);
}

public class MyRepositoryImpl implements MyRepository {
@Override
public void save(String data) {
// 數據庫操作
}
}

public class MyService {

@Autowired
private MyRepository myRepository;

@Transactional
public void doSomething(String data) {
myRepository.save(data);
}
}

public class MyTianluoService extends MyService {
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void doSomething(String data) {
super.doSomething(data);
}
}
  • 事務失效的原因:MyTianluoService是MyService的子類,并且覆蓋了doSomething()方法。在該方法中,使用了不同的傳播行為(REQUIRES_NEW)來覆蓋父類的@Transactional注解。在這種情況下,當調用MyTianluoService的doSomething()方法時,由于子類方法中的注解覆蓋了父類的注解,Spring框架將不會在父類的方法中啟動事務。因此,當MyRepository的save()方法被調用時,事務將不會被啟動,也不會回滾。這將導致數據不一致的問題,因為在MyRepository的save()方法中進行的數據庫操作將不會回滾。

12.嵌套事務的坑

@Service
public class TianLuoServiceInOutService {

@Autowired
private TianLuoFlowService tianLuoFlowService;
@Autowired
private TianLuoMapper tianLuoMapper;

@Transactional
public void addTianLuo(TianLuo tianluo) throws Exception {
tianLuoMapper.save(tianluo);
tianLuoFlowService.saveFlow(tianluo);
}
}

@Service
public class TianLuoFlowService {

@Autowired
private TianLuoFlowMapper tianLuoFlowMapper;

@Transactional(propagation = Propagation.NESTED)
public void saveFlow(TianLuo tianLuo) {
tianLuoFlowMapper.save(tianLuo);
throw new RuntimeException();
}
}

以上代碼使用了嵌套事務,如果saveFlow出現運行時異常,會繼續往上拋,到外層addTianLuo的方法,導致tianLuoMapper.save也會回滾啦。如果不想因為被內部嵌套的事務影響,可以用try-catch包住,如下:

@Transactional
public void addTianLuo(TianLuo tianluo) throws Exception {
tianLuoMapper.save(tianluo);
try {
tianLuoFlowService.saveFlow(tianluo);
} catch (Exception e) {
log.error("save tian luo flow fail,message:{}",e.getMessage());
}
}

13. 事務多線程調用

@Service
public class TianLuoService {

@Autowired
private TianLuoMapper tianLuoMapper;

@Autowired
private TianLuoFlowService tianLuoFlowService;

@Transactional
public void addTianLuo(TianLuo tianluo) {
//保存tianluo數據庫記錄
tianLuoMapper.save(tianluo);
//多線程調用
new Thread(() -> {
tianLuoFlowService.saveFlow(tianluo);
}).start();
}
}

@Service
public class TianLuoFlowService {

@Autowired
private TianLuoFlowMapper tianLuoFlowMapper;

@Transactional
public void save(TianLuo tianLuo) {
tianLuoFlowMapper.saveFlow(tianLuo);
}
}
  • 事務不生效原因:這是因為Spring事務是基于線程綁定的,每個線程都有自己的事務上下文,而多線程環境下可能會存在多個線程共享同一個事務上下文的情況,導致事務不生效。Spring事務管理器通過使用線程本地變量(ThreadLocal)來實現線程安全。大家有興趣的話,可以去看下源碼哈.

在Spring事務管理器中,通過TransactionSynchronizationManager類來管理事務上下文。TransactionSynchronizationManager內部維護了一個ThreadLocal對象,用來存儲當前線程的事務上下文。在事務開始時,TransactionSynchronizationManager會將事務上下文綁定到當前線程的ThreadLocal對象中,當事務結束時,TransactionSynchronizationManager會將事務上下文從ThreadLocal對象中移除。

圖片

14.異常被捕獲并處理了,沒有重新拋出

@Service
public class TianLuoServiceImpl implements TianLuoService {

@Autowired
private TianLuoMapper tianLuoMapper;

@Autowired
private TianLuoFlowMapper tianLuoFlowMapper;

@Transactional
public void addTianLuo(TianLuo tianluo) {
try {
//保存tianluo數據庫記錄
tianLuoMapper.save(tianluo);
//保存tianluo flow數據庫記錄
tianLuoFlowMapper.saveFlow(tianluo);
} catch (Exception e) {
log.error("add TianLuo error,id:{},message:{}", tianluo.getId(),e.getMessage());
}
}

}
  • 事務不生效的原因: 事務中的異常已經被業務代碼捕獲并處理,而沒有被正確地傳播回事務管理器,事務將無法回滾。我們可以從spring源碼(TransactionAspectSupport這個類)中找到答案:
public abstract class TransactionAspectSupport implements BeanFactoryAware, InitializingBean {

//這方法會省略部分代碼,只留關鍵代碼哈
@Nullable
protected Object invokeWithinTransaction(Method method, @Nullable Class<?> targetClass, final InvocationCallback invocation) throws Throwable {

if (txAttr == null || !(ptm instanceof CallbackPreferringPlatformTransactionManager)) {

TransactionInfo txInfo = createTransactionIfNecessary(ptm, txAttr, joinpointIdentification);
Object retVal;
try {
//Spring AOP中MethodInterceptor接口的一個方法,它允許攔截器在執行被代理方法之前和之后執行額外的邏輯。
retVal = invocation.proceedWithInvocation();
}
catch (Throwable ex) {
//用于在發生異常時完成事務(如果Spring catch不到對應的異常的話,就不會進入回滾事務的邏輯)
completeTransactionAfterThrowing(txInfo, ex);
throw ex;
}
finally {
cleanupTransactionInfo(txInfo);
}

//用于在方法正常返回后提交事務。
commitTransactionAfterReturning(txInfo);
return retVal;
}
}

在invokeWithinTransaction方法中,當Spring catch到Throwable異常的時候,就會調用completeTransactionAfterThrowing()方法進行事務回滾的邏輯。但是,在TianLuoServiceImpl類的spring事務方法addTianLuo中,直接把異常catch住了,并沒有重新throw出來,因此 Spring自然就catch不到異常啦,因此事務回滾的邏輯就不會執行,事務就失效了。

  • 解決方案:在spring事務方法中,當我們使用了try-catch,如果catch住異常,記錄完異常日志什么的,一定要重新把異常拋出來,正例如下:
@Service
public class TianLuoServiceImpl implements TianLuoService {

@Autowired
private TianLuoMapper tianLuoMapper;

@Autowired
private TianLuoFlowMapper tianLuoFlowMapper;

@Transactional(rollbackFor = Exception.class)
public void addTianLuo(TianLuo tianluo) {
try {
//保存tianluo數據庫記錄
tianLuoMapper.save(tianluo);
//保存tianluo flow數據庫記錄
tianLuoFlowMapper.saveFlow(tianluo);
} catch (Exception e) {
log.error("add TianLuo error,id:{},message:{}", tianluo.getId(),e.getMessage());
throw e;
}
}
}

15. 手動拋了別的異常

@Service
public class TianLuoServiceImpl implements TianLuoService {

@Autowired
private TianLuoMapper tianLuoMapper;

@Autowired
private TianLuoFlowMapper tianLuoFlowMapper;

@Transactional
public void addTianLuo(TianLuo tianluo) throws Exception {
//保存tianluo數據庫記錄
tianLuoMapper.save(tianluo);
//保存tianluo流水數據庫記錄
tianLuoFlowMapper.saveFlow(tianluo);
throw new Exception();
}
}
  • 失效的原因:上面的代碼例子中,手動拋了Exception異常,但是是不會回滾的,因為Spring默認只處理RuntimeException和Error,對于普通的Exception不會回滾,除非,用rollbackFor屬性指定配置。
  • 解決方案:添加屬性配置@Transactional(rollbackFor = Exception.class)。

注解為事務范圍的方法中,事務的回滾僅僅對于unchecked的異常有效。對于checked異常無效。也就是說事務回滾僅僅發生在,出現RuntimeException或Error的時候。通俗一點就是:代碼中出現的空指針等異常,會被回滾。而文件讀寫、網絡超時問題等,spring就沒法回滾了。

責任編輯:武曉燕 來源: 撿田螺的小男孩
相關推薦

2023-04-21 13:57:38

Redis阻塞半自動

2023-04-03 07:57:00

2025-03-25 12:00:00

@Value?Spring開發

2022-09-08 13:56:49

MySQL事務記錄鎖

2025-06-05 03:10:00

mmapmalloc共享內存

2024-09-09 08:29:25

2024-04-15 08:37:35

2021-09-04 07:56:44

Spring事務失效

2023-06-30 07:58:07

Spring數據源事務

2024-04-24 09:02:58

線程池面試鎖升級

2023-07-05 08:45:18

Spring事務失效場景

2024-10-31 08:50:14

2023-02-27 09:03:23

JavaCAS

2022-08-27 13:50:44

TCP服務端函數

2022-09-12 15:55:57

TCP函數程序

2022-02-14 16:53:57

Spring項目數據庫

2021-06-04 09:56:12

RedisMySQL美團

2024-08-06 09:42:23

2022-03-25 10:47:59

架構實踐美團

2013-08-20 13:11:58

技術美團
點贊
收藏

51CTO技術棧公眾號

伊人免费在线观看高清版| 色一情一区二区三区| 青青久在线视频免费观看| 日日摸夜夜添夜夜添亚洲女人| 中文字幕日韩电影| 免费黄视频在线观看| 亚洲欧洲自拍| 亚洲另类在线制服丝袜| 欧美男人的天堂| 99精品人妻无码专区在线视频区| 激情婷婷欧美| 色婷婷综合久久久久中文字幕1| 成人做爰www看视频软件| 日韩欧美一区二区三区在线观看 | 成人h猎奇视频网站| 精品少妇一二三区| 久久国产小视频| 亚洲精品国精品久久99热| 看看黄色一级片| 在线女人免费视频| 亚洲精品国产精华液| 欧美极品色图| 国精品人妻无码一区二区三区喝尿| 日韩电影在线观看网站| 久久免费福利视频| 欧美xxxooo| 国产免费播放一区二区| 亚洲国产精久久久久久久| 亚洲网中文字幕| 日本精品网站| 欧美性猛交xxxx乱大交极品| 久久久99精品视频| 欧美69xxx| 国产色产综合产在线视频| 国产欧美一区二区在线播放| 国产女人18毛片水真多| 日本欧美加勒比视频| 57pao成人永久免费视频| 免费中文字幕在线| 日韩欧美大片| 正在播放欧美视频| 精品无码一区二区三区| 欧美日韩一区二区三区在线电影| 日韩免费看网站| 亚洲午夜激情影院| 九九热这里有精品| 在线亚洲精品福利网址导航| 成人小视频在线看| 男人最爱成人网| 色综合视频在线观看| 伊人成色综合网| 欧美办公室脚交xxxx| 亚洲福利视频三区| av免费观看大全| av中文资源在线资源免费观看| 一区二区理论电影在线观看| 777久久精品一区二区三区无码| 久操视频在线观看| 久久久久久久久久电影| 9.1麻豆精品| 欧美黑人猛猛猛| 在线观看国产一区| 一本大道久久加勒比香蕉| www.日韩在线| 精品国产aⅴ| 欧洲一级在线观看| 五月天婷婷在线视频| 美女在线视频一区| 国产精品久久久久久久电影| 日本成人一级片| 蜜桃视频在线观看一区二区| 国产精品入口夜色视频大尺度| 欧美高清69hd| 国产综合色在线| 成人精品水蜜桃| 性插视频在线观看| 国产欧美视频一区二区三区| 亚洲精品一区二区三区蜜桃久| 九色porny丨首页在线| 亚洲在线观看免费视频| 91猫先生在线| 激情欧美一区二区三区黑长吊| 这里只有精品99re| 人妻av一区二区| 久久99国产精品视频| 久久精品视频99| 久久综合激情网| 久久久久.com| 91亚洲永久免费精品| 日韩中文字幕免费观看| 国产欧美一区二区精品久导航| 亚洲成人动漫在线| 亚洲十八**毛片| 欧美精品久久天天躁| 丰满熟女人妻一区二区三区| 国产成人精品三级高清久久91| 色婷婷av一区二区三区在线观看| 国产一级一片免费播放| 日韩高清不卡一区二区三区| 91九色极品视频| 国产三级在线观看| 亚洲在线免费播放| 污污动漫在线观看| 久久黄色影视| 久久精品成人欧美大片| 黄色在线观看国产| 国产一区啦啦啦在线观看| 免费看污久久久| 日韩免费影院| 欧美午夜电影在线播放| 国产精品成人99一区无码| 成人网18免费网站| 国内精品久久影院| 国产精品国产av| 久久久噜噜噜久噜久久综合| 久艹在线免费观看| 四虎精品在线观看| 亚洲人av在线影院| 国产无码精品在线播放| www.看毛片| 麻豆av在线免费看| 亚洲国产成人精品视频| 天天干天天操天天玩| 日韩激情啪啪| 欧美高清视频免费观看| 亚洲网站免费观看| 国产午夜精品一区二区三区视频 | 国产福利在线| 天天av天天翘天天综合网色鬼国产| 天天久久综合网| re久久精品视频| 国产成人精品国内自产拍免费看| 天天射天天色天天干| 亚洲综合自拍偷拍| 日本亚洲一区二区三区| 婷婷久久一区| 国产日韩在线看片| 婷婷视频在线| 欧美在线观看一区| 亚洲图片另类小说| 久久久久久一区二区| 精品在线视频一区二区| 川上优av中文字幕一区二区| 欧美精品一区二区三| 国产网址在线观看| 北岛玲一区二区三区四区| 激情成人开心网| 日韩一区二区三区色| 欧美大奶子在线| 精品人妻一区二区三区四区不卡| 亚洲视频你懂的| 日本一本在线视频| 综合亚洲视频| 高清av免费一区中文字幕| 黄色成人在线网| 亚洲成人999| jizz国产免费| 99久久99精品久久久久久| 免费av手机在线观看| 免费日韩一区二区三区| 热久久美女精品天天吊色| 久草在线网址| 欧美日韩激情一区二区三区| 黑人狂躁日本娇小| 国产99久久久精品| 久久视频这里有精品| 最新国产精品视频| 国产精品免费一区豆花| www久久日com| 日韩成人在线免费观看| 一级黄色在线观看| 自拍视频在线观看一区二区| aaaaa黄色片| 久久精品午夜| 亚洲伊人婷婷| av日韩精品| 国产999精品久久久影片官网| 一区二区三区视频网站| 日韩欧美电影一区| 天天综合网久久综合网| 国产精品久久久久影视| xxx中文字幕| 亚洲一区自拍| 亚洲毛片aa| 美国十次av导航亚洲入口| 国产91色在线免费| 黄色片网站在线观看| 日韩av综合网| 97免费观看视频| 黄网动漫久久久| 在线观看黄网址| 久久综合资源网| 色婷婷一区二区三区在线观看| 日韩午夜av| 亚洲午夜精品久久| 欧美黑人做爰爽爽爽| 国产一区二区香蕉| 欧美男男tv网站在线播放| 日韩网站免费观看| 三级视频在线播放| 欧美大胆一级视频| 中文字幕 人妻熟女| 亚洲午夜国产一区99re久久| 免费一区二区三区在线观看| jizz日韩| 欧美另类变人与禽xxxxx| 豆国产97在线 | 亚洲| 中文字幕乱码日本亚洲一区二区| 日本一级大毛片a一| 另类亚洲自拍| 中文字幕日韩在线观看| 97超碰人人模人人人爽人人爱| 亚洲va欧美va国产va天堂影院| 99精品中文字幕| 久久久91精品国产一区二区精品| 亚洲精品鲁一鲁一区二区三区 | 在线看成人短视频| aaa级精品久久久国产片| 久久av影院| 日本欧美黄网站| 电影在线观看一区| 欧美高清在线视频观看不卡| www.国产精品.com| 亚洲四色影视在线观看| 天天操天天干天天舔| 精品久久久久香蕉网| 国产绿帽刺激高潮对白| 欧美日韩在线免费视频| 精品久久久久久久久久久久久久久久| 亚洲国产日韩a在线播放| 我家有个日本女人| 成人欧美精品一区二区| 欧美成人tv| 亚洲激情视频在线观看| 久久久久久久国产精品毛片| 国产精品久久久久aaaa樱花| 欧美熟妇激情一区二区三区| 99re成人在线| 中文字幕人妻一区二区三区| 国产成人午夜99999| 性久久久久久久久久久久久久| 日本成人超碰在线观看| 欧美一级黄色影院| 日韩精品视频网| 在线观看免费成人av| 久久久久网站| 色一情一乱一伦一区二区三区日本| 亚洲欧美日本视频在线观看| 欧美色图色综合| 香蕉国产精品偷在线观看不卡| 黄色国产一级视频| 国产欧美91| 无码aⅴ精品一区二区三区浪潮 | 香蕉av福利精品导航| 国产一卡二卡在线播放| 亚瑟在线精品视频| www.日本精品| 色综合中文字幕国产| 日韩av免费播放| 欧美剧在线免费观看网站| 国产精品一区二区黑人巨大 | 999热精品视频| 国产99久久精品| www.啪啪.com| 26uuu亚洲综合色欧美 | 亚洲精品一二三| 伊人365影院| 欧美性生活大片免费观看网址| 中文字幕免费观看| 欧美麻豆精品久久久久久| 精品国产99久久久久久宅男i| 精品国产一区二区亚洲人成毛片| 少妇一区二区三区四区| 亚洲三级黄色在线观看| 日本在线视频观看| 久久久久久久久久亚洲| 毛片免费看不卡网站| 国产欧美日韩中文字幕| 中文字幕一区二区三区四区久久| 免费成人看片网址| 66久久国产| 国自产拍偷拍精品啪啪一区二区| 日本亚洲天堂网| 久久久久久久久久影视| 久久久亚洲综合| www.色小姐com| 日韩欧美在线免费| 国产情侣av在线| 精品调教chinesegay| 久久bbxx| 国产精品白嫩初高中害羞小美女| 日韩精品三级| 奇米视频888战线精品播放| 中文一区一区三区免费在线观看| 欧美色图色综合| 国产精品1024久久| 国产成人福利在线| 亚洲一级不卡视频| 中文无码av一区二区三区| 亚洲精品在线电影| 色网站免费在线观看| 欧美亚洲国产另类| 2020国产精品极品色在线观看| 欧美精品二区三区四区免费看视频| 亚洲在线久久| 不卡av免费在线| kk眼镜猥琐国模调教系列一区二区| 老司机精品免费视频| 成人涩涩小片视频日本| 色狠狠一区二区三区香蕉| wwwav网站| 日韩最新中文字幕电影免费看| 性爽视频在线| 国产伦精品一区二区三| 亚洲va在线| 一路向西2在线观看| 国产午夜精品一区二区三区四区| 日本黄色片视频| 欧美zozo另类异族| 国产黄色在线免费观看| 国产精品久久久av久久久| 伊人春色精品| 久久久免费视频网站| 91麻豆国产精品久久| 精品肉丝脚一区二区三区| 日韩一区二区影院| 麻豆电影在线播放| 国产欧美精品va在线观看| 欧美一级淫片| 日本xxxxxxx免费视频| 91免费观看在线| 亚洲精品www久久久久久| 精品国产a毛片| 黄色成人在线网| 国产精品久久久一区二区三区| 一级欧洲+日本+国产| 在线播放av中文字幕| 国产精品久久久久天堂| 探花国产精品一区二区| 一区二区在线视频播放| 日本肉肉一区| 涩涩涩999| 蜜臀av性久久久久蜜臀av麻豆| 我不卡一区二区| 在线观看国产一区二区| 大地资源中文在线观看免费版| 国产福利精品av综合导导航| 激情综合网五月| 9久久婷婷国产综合精品性色| 中文字幕乱码日本亚洲一区二区| 中文字幕乱码在线观看| 色香阁99久久精品久久久| 五月天色综合| av中文字幕av| 成人听书哪个软件好| 日本高清www免费视频| 亚洲丝袜一区在线| 成人在线免费av| 黄色网络在线观看| www.在线欧美| 中文字幕免费高清网站| 丝袜一区二区三区| 麻豆视频久久| 日本在线xxx| 欧美激情一区三区| 国产精品久久免费| 欧美激情啊啊啊| 久久99高清| 亚洲男人天堂2021| 午夜伊人狠狠久久| 国产一区电影| 91精品在线观看视频| 国内成人在线| 中国美女乱淫免费看视频| 91成人看片片| 中文字幕在线播放网址| 久久久久se| 精品一区二区久久久| 精品视频久久久久| 亚洲日韩中文字幕| 日韩视频一区二区三区四区| 免费在线观看日韩视频| 中文字幕一区二区三区精华液| 亚洲乱色熟女一区二区三区| 人人爽久久涩噜噜噜网站| 午夜影院欧美| 亚洲国产综合视频| 欧美日韩黄色一区二区| www.51av欧美视频| 亚洲一区二区精品在线观看| 成人禁用看黄a在线| 艳妇乳肉豪妇荡乳av无码福利| 欧美精品免费播放| 精品国产美女| 日本人添下边视频免费| 欧美日韩一区二区在线观看视频 | 国产91精品高潮白浆喷水| 99成人超碰| 国产全是老熟女太爽了| 日韩一区二区三区视频在线|