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

Spring任務(wù)調(diào)度&異步任務(wù)&Web異步請求三者如何配置線程池?

開發(fā) 前端
首先在容器中通過類型查找TaskScheduler Bean,如果沒有則拋出NoSuchBeanDefinitionException異常。在這一步中,如果找到多個,那么會在通過beanName=taskScheduler在容器中查找。

一、任務(wù)調(diào)度

注解類:@Scheduled

核心處理類:ScheduledAnnotationBeanPostProcessor

使用的線程池:從容器中查詢TaskScheduler。

  • 首先在容器中通過類型查找TaskScheduler Bean,如果沒有則拋出NoSuchBeanDefinitionException異常。
  • 在這一步中,如果找到多個,那么會在通過beanName=taskScheduler在容器中查找
  • 在上一步中拋出異常后會繼續(xù)查找java.util.concurrent.ScheduledExecutorService 類型的Bean。
  • 在這一步中,如果找到多個,那么會在通過beanName=taskScheduler在容器中查找
  • 在上一步中還是沒有則結(jié)束(程序并不會報錯)

如果上面流程都沒有找到,則會通過如下方式創(chuàng)建一個。

this.localExecutor = Executors.newSingleThreadScheduledExecutor();
 this.taskScheduler = new ConcurrentTaskScheduler(this.localExecutor);

在Springboot中有個自動配置類會配置一個TaskSchedulingAutoConfiguration。

public class TaskSchedulingAutoConfiguration {
   @Bean
   @ConditionalOnBean(name = TaskManagementConfigUtils.SCHEDULED_ANNOTATION_PROCESSOR_BEAN_NAME)
   @ConditionalOnMissingBean({ SchedulingConfigurer.class, TaskScheduler.class, ScheduledExecutorService.class })
   public ThreadPoolTaskScheduler taskScheduler(TaskSchedulerBuilder builder) {
     return builder.build();
   }
   
   @Bean
   @ConditionalOnMissingBean
   public TaskSchedulerBuilder taskSchedulerBuilder(TaskSchedulingProperties properties,
       ObjectProvider<TaskSchedulerCustomizer> taskSchedulerCustomizers) {
     TaskSchedulerBuilder builder = new TaskSchedulerBuilder();
     builder = builder.poolSize(properties.getPool().getSize());
     Shutdown shutdown = properties.getShutdown();
     builder = builder.awaitTermination(shutdown.isAwaitTermination());
     builder = builder.awaitTerminationPeriod(shutdown.getAwaitTerminationPeriod());
     builder = builder.threadNamePrefix(properties.getThreadNamePrefix());
     builder = builder.customizers(taskSchedulerCustomizers);
     return builder;
   }
 }

二、異步任務(wù)

  • 注解類:Async。
  • 核心處理類:AsyncAnnotationBeanPostProcessor。

通過ProxyAsyncConfiguration配置,該類繼承AbstractAsyncConfiguration。

在父類中會初始化,下面兩個成員變量:

@Configuration(proxyBeanMethods = false)
 public abstract class AbstractAsyncConfiguration implements ImportAware {
   @Nullable
   protected Supplier<Executor> executor;
   @Nullable
   protected Supplier<AsyncUncaughtExceptionHandler> exceptionHandler;
   // 在容器中查找AsyncConfigurer Bean 且只能有一個
   @Autowired
   void setConfigurers(ObjectProvider<AsyncConfigurer> configurers) {
     Supplier<AsyncConfigurer> configurer = SingletonSupplier.of(() -> {
       List<AsyncConfigurer> candidates = configurers.stream().collect(Collectors.toList());
       if (CollectionUtils.isEmpty(candidates)) {
         return null;
       }
       if (candidates.size() > 1) {
         throw new IllegalStateException("Only one AsyncConfigurer may exist");
       }
       return candidates.get(0);
     });
     this.executor = adapt(configurer, AsyncConfigurer::getAsyncExecutor);
     this.exceptionHandler = adapt(configurer, AsyncConfigurer::getAsyncUncaughtExceptionHandler);
   }
 
   private <T> Supplier<T> adapt(Supplier<AsyncConfigurer> supplier, Function<AsyncConfigurer, T> provider) {
     return () -> {
       AsyncConfigurer configurer = supplier.get();
       return (configurer != null ? provider.apply(configurer) : null);
     };
   }
 }

使用的線程池:

  • 首先在容器中通過類型查找AsyncConfigurer Bean。
  • 如果沒有則設(shè)置默認(rèn)的AsyncConfigurer::getAsyncExecutor 該方法是接口中默認(rèn)方法,返回的是null。
  • 在上一步中如果容器中沒有AsyncConfigurer,那么設(shè)置到AsyncAnnotationBeanPostProcessor中也將就是null。
  • 初始化AsyncAnnotationBeanPostProcessor。
public class AsyncAnnotationBeanPostProcessor extends AbstractBeanFactoryAwareAdvisingPostProcessor {
   @Nullable
   private Supplier<Executor> executor;
   @Nullable
   private Supplier<AsyncUncaughtExceptionHandler> exceptionHandler;
   @Override
   public void setBeanFactory(BeanFactory beanFactory) {
     super.setBeanFactory(beanFactory);
     // 構(gòu)建切面Advisor
     AsyncAnnotationAdvisor advisor = new AsyncAnnotationAdvisor(this.executor, this.exceptionHandler);
     if (this.asyncAnnotationType != null) {
       advisor.setAsyncAnnotationType(this.asyncAnnotationType);
     }
     advisor.setBeanFactory(beanFactory);
     this.advisor = advisor;
   }
 }
 public class AsyncAnnotationAdvisor extends AbstractPointcutAdvisor implements BeanFactoryAware {
   public AsyncAnnotationAdvisor(
       @Nullable Supplier<Executor> executor, @Nullable Supplier<AsyncUncaughtExceptionHandler> exceptionHandler) {
 
     Set<Class<? extends Annotation>> asyncAnnotationTypes = new LinkedHashSet<>(2);
     asyncAnnotationTypes.add(Async.class);
     try {
       asyncAnnotationTypes.add((Class<? extends Annotation>)
           ClassUtils.forName("javax.ejb.Asynchronous", AsyncAnnotationAdvisor.class.getClassLoader()));
     }
     // 構(gòu)建通知類
     this.advice = buildAdvice(executor, exceptionHandler);
     this.pointcut = buildPointcut(asyncAnnotationTypes);
   }
   protected Advice buildAdvice(
       @Nullable Supplier<Executor> executor, @Nullable Supplier<AsyncUncaughtExceptionHandler> exceptionHandler) {
 
     AnnotationAsyncExecutionInterceptor interceptor = new AnnotationAsyncExecutionInterceptor(null);
     // 調(diào)用父類方法
     interceptor.configure(executor, exceptionHandler);
     return interceptor;
   }
 }
 public abstract class AsyncExecutionAspectSupport implements BeanFactoryAware { 
   public void configure(@Nullable Supplier<Executor> defaultExecutor,
       @Nullable Supplier<AsyncUncaughtExceptionHandler> exceptionHandler) {
 
     // 如果defaultExecutor則調(diào)用getDefaultExecutor方法,該方法在子類重寫了
     this.defaultExecutor = new SingletonSupplier<>(defaultExecutor, () -> getDefaultExecutor(this.beanFactory));
     this.exceptionHandler = new SingletonSupplier<>(exceptionHandler, SimpleAsyncUncaughtExceptionHandler::new);
   }
   protected Executor getDefaultExecutor(@Nullable BeanFactory beanFactory) {
     if (beanFactory != null) {
       try {
         // 容器中查找TaskExecutor類型的Bean
         return beanFactory.getBean(TaskExecutor.class);
       } catch (NoUniqueBeanDefinitionException ex) {
         try {
           return beanFactory.getBean(DEFAULT_TASK_EXECUTOR_BEAN_NAME, Executor.class);
         } catch (NoSuchBeanDefinitionException ex2) {
         }
       } catch (NoSuchBeanDefinitionException ex) {
         try {
           return beanFactory.getBean(DEFAULT_TASK_EXECUTOR_BEAN_NAME, Executor.class);
         } catch (NoSuchBeanDefinitionException ex2) {
         }
         // Giving up -> either using local default executor or none at all...
       }
     }
     return null;
   }
 }
 public class AsyncExecutionInterceptor extends AsyncExecutionAspectSupport implements MethodInterceptor, Ordered {
   protected Executor getDefaultExecutor(@Nullable BeanFactory beanFactory) {
     // 先通過父類獲取
     Executor defaultExecutor = super.getDefaultExecutor(beanFactory);
     // 如果父類獲取不到,則創(chuàng)建默認(rèn)的SimpleAsyncTaskExecutor
     return (defaultExecutor != null ? defaultExecutor : new SimpleAsyncTaskExecutor());
   }
 }

總結(jié):

  • 從容器中查找TaskExecutor Bean。
  • 上一步?jīng)]有找到,則查找beanName=taskExecutor,類型為java.util.concurrent.Executor的Bean。
  • 如果上一步還是沒有找到,那么最終創(chuàng)建默認(rèn)的SimpleAsyncTaskExecutor 這是個沒有上限的線程池,來一個任務(wù)創(chuàng)建新線程。

如果執(zhí)行的異步任務(wù)很多且線程池,線程有限則多的任務(wù)會等待。

三、Web異步接口

RequestMappingHandlerAdapter。

public class RequestMappingHandlerAdapter {
   // 默認(rèn)是一個沒有上限的線程池
   private AsyncTaskExecutor taskExecutor = new SimpleAsyncTaskExecutor("MvcAsync");
   protected ModelAndView invokeHandlerMethod(
     HttpServletRequest request,
     HttpServletResponse response, 
     HandlerMethod handlerMethod) throws Exception {
     // ...
     WebAsyncManager asyncManager = WebAsyncUtils.getAsyncManager(request);
     asyncManager.setTaskExecutor(this.taskExecutor);
     // ...
   }
 }

創(chuàng)建RequestMappingHandlerAdapter Bean對象。

繼承關(guān)系。

public static class EnableWebMvcConfiguration extends DelegatingWebMvcConfiguration{}
 public class DelegatingWebMvcConfiguration extends WebMvcConfigurationSupport {
   private final WebMvcConfigurerComposite configurers = new WebMvcConfigurerComposite();
   // WebMvcConfigurer默認(rèn)實(shí)現(xiàn)
   @Autowired(required = false)
   public void setConfigurers(List<WebMvcConfigurer> configurers) {
     if (!CollectionUtils.isEmpty(configurers)) {
       this.configurers.addWebMvcConfigurers(configurers);
     }
   }
   @Override
   protected void configureAsyncSupport(AsyncSupportConfigurer configurer) {
     this.configurers.configureAsyncSupport(configurer);
   }
 }
 public class WebMvcConfigurationSupport implements ApplicationContextAware, ServletContextAware {
   private AsyncSupportConfigurer asyncSupportConfigurer;
   @Bean
   public RequestMappingHandlerAdapter requestMappingHandlerAdapter(...) {
     // ...
     AsyncSupportConfigurer configurer = getAsyncSupportConfigurer();
     if (configurer.getTaskExecutor() != null) {
       adapter.setTaskExecutor(configurer.getTaskExecutor());
     }
     // ...
   }
   protected AsyncSupportConfigurer getAsyncSupportConfigurer() {
     if (this.asyncSupportConfigurer == null) {
       this.asyncSupportConfigurer = new AsyncSupportConfigurer();
       configureAsyncSupport(this.asyncSupportConfigurer);
     }
     return this.asyncSupportConfigurer;
   }
 }
 public class WebMvcAutoConfiguration {
   public static class WebMvcAutoConfigurationAdapter implements WebMvcConfigurer, ServletContextAware {
     public void configureAsyncSupport(AsyncSupportConfigurer configurer) {
       // 判斷容器中是否有beanName = applicationTaskExecutor 的Bean
       if (this.beanFactory.containsBean(TaskExecutionAutoConfiguration.APPLICATION_TASK_EXECUTOR_BEAN_NAME)) {
         // 通過beanName = applicationTaskExecutor獲取bean對象
         Object taskExecutor = this.beanFactory.getBean(TaskExecutionAutoConfiguration.APPLICATION_TASK_EXECUTOR_BEAN_NAME);
         // 判斷是否AsyncTaskExecutor對象
         if (taskExecutor instanceof AsyncTaskExecutor) {
           configurer.setTaskExecutor(((AsyncTaskExecutor) taskExecutor));
         }
       }
       Duration timeout = this.mvcProperties.getAsync().getRequestTimeout();
       if (timeout != null) {
         configurer.setDefaultTimeout(timeout.toMillis());
       }
     }
   }
 }

總結(jié):

  • 默認(rèn)使用SimpleAsyncTaskExecutor。
  • 如果容器中存在以beanName = applicationTaskExecutor 且 類型是 AsyncTaskExecutor, 則使用該bean。

到這你應(yīng)該知道了這三者在線程池方面該如何正確配置及使用了。

責(zé)任編輯:姜華 來源: 今日頭條
相關(guān)推薦

2024-10-14 13:12:59

2020-07-02 07:44:27

Spring教程異步

2014-04-24 09:49:57

Android測試異步任務(wù)

2025-11-10 03:15:00

線程池asyncToolSpring

2021-11-01 22:36:04

JavaScript

2024-02-28 09:54:07

線程池配置

2023-12-29 09:38:00

Java線程池

2023-08-02 08:03:08

Python線程池

2023-01-03 10:38:04

函數(shù)計算技術(shù)

2022-06-02 10:18:24

函數(shù)計算異步

2021-08-16 15:49:31

開發(fā)框架單線程異步

2024-06-13 00:54:19

2023-11-03 14:32:38

2021-05-13 12:00:51

cron調(diào)度任務(wù)系統(tǒng)運(yùn)維

2025-05-08 08:00:00

FastAPI開發(fā)異步定時

2023-12-26 07:44:00

Spring定時調(diào)度

2014-12-24 10:00:07

Spring

2023-08-04 11:04:03

線程池項(xiàng)目開發(fā)

2024-09-09 15:09:30

2024-07-31 15:57:41

點(diǎn)贊
收藏

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

五月激情婷婷综合| 免费一级特黄特色大片| 亚洲精品一区二区在线播放∴| 中文字幕成人网| 999在线观看免费大全电视剧| 久热这里只有精品在线| 国产欧美日韩在线一区二区| 制服丝袜亚洲网站| 国产白丝袜美女久久久久| 岛国视频免费在线观看| 国产成人综合精品三级| 91精品国产电影| 男女全黄做爰文章| 偷拍自拍亚洲色图| 91精品国产综合久久福利| 欧美成人xxxxx| v天堂福利视频在线观看| 久久影院电视剧免费观看| 91九色精品视频| 国产综合精品视频| 欧美99在线视频观看| 日韩成人在线视频观看| а 天堂 在线| 一呦二呦三呦精品国产| 午夜精品一区二区三区电影天堂| 尤物国产精品| 黄色片视频在线观看| 国产精品影视网| 国产精品久久久久久久av电影| 久热这里只有精品在线| 91精品久久久久久久久久不卡| 亚洲国产精品免费| 能看毛片的网站| 日本国产亚洲| 在线视频观看一区| 国产中文字幕视频在线观看| www在线视频| 国产精品日产欧美久久久久| 久久草视频在线看| 亚洲欧美另类视频| 国产成人综合亚洲91猫咪| 91美女片黄在线观| 一级做a爱片久久毛片| 视频一区欧美日韩| 日本韩国欧美精品大片卡二| 日本系列第一页| 国内精品久久久久久久97牛牛 | 精品国产福利在线| 全黄性性激高免费视频| 欧美人与禽猛交乱配| 亚洲天堂成人在线观看| 亚洲一区尤物| 日本成a人片在线观看| 中日韩av电影| 亚洲国产日韩综合一区| 成年女人的天堂在线| 国产欧美一区二区精品性| 欧美高清性xxxxhd| 午夜成人鲁丝片午夜精品| av一二三不卡影片| 久久国产一区| 久草福利在线视频| 国产欧美视频一区二区| 亚洲精品自在在线观看| 午夜国产福利在线| 中文字幕第一区| 亚洲成年人专区| 最新国产在线拍揄自揄视频| 亚洲精品成人精品456| 激情五月婷婷六月| 亚洲欧美se| 欧美影院一区二区三区| 亚洲精品综合在线观看| 亚洲高清在线一区| 日韩hd视频在线观看| 特大黑人巨人吊xxxx| 国产区精品区| 中文字幕亚洲一区| 99精品久久久久| 国产精品一卡| 国产欧美日韩视频| 黄色片一区二区| www精品美女久久久tv| 亚洲欧美日韩综合一区| h网站久久久| 天天综合天天综合色| 精品久久久噜噜噜噜久久图片| 亚洲午夜国产成人| 亚洲精品国产精品久久清纯直播| 免费污网站在线观看| 五月天久久网站| 韩国福利视频一区| 91精品国产色综合久久不8| 国产黑丝在线一区二区三区| 另类欧美小说| 精品国产99久久久久久| 五月婷婷久久丁香| 校园春色 亚洲色图| aaa国产精品视频| 日韩久久精品电影| 黄视频网站免费看| 久久精品国语| 97人人干人人| 91成人高清| 精品美女久久久久久免费| 艹b视频在线观看| 粉嫩久久久久久久极品| 最新的欧美黄色| 国产性xxxx高清| 国产一区二区三区在线观看精品| 裸体丰满少妇做受久久99精品| 成年人黄视频在线观看| 色猫猫国产区一区二在线视频| 特黄特黄一级片| 欧美日韩亚洲在线观看| 久久久久中文字幕| 国产一区二区在线视频观看| 26uuu久久天堂性欧美| 国产成人三级视频| 成人全视频免费观看在线看| 精品性高朝久久久久久久| 一区二区在线观看免费视频| 免费成人在线网站| 欧美成人综合一区| av手机在线观看| 日韩一区二区三区四区| 天天操天天摸天天舔| 久久深夜福利| 久久综合久久久| av蜜臀在线| 精品久久人人做人人爱| 精品国产精品国产精品| 美国毛片一区二区三区| 日韩av电影免费在线观看| 亚洲第一av| 日韩高清免费在线| 欧美日韩综合在线观看| 成人免费视频播放| 免费人成在线观看视频播放| 免费观看亚洲视频大全| 日韩中文字幕免费视频| 波多野结衣啪啪| 久久久三级国产网站| 欧美性久久久久| 日本亚洲不卡| 欧美又大又硬又粗bbbbb| 天天综合网天天综合| 五月婷婷久久综合| 日本黄色免费观看| 免费在线成人| 欧洲精品亚洲精品| 成人涩涩视频| 久久精品99国产精品酒店日本| 最近国语视频在线观看免费播放| 国产午夜精品一区二区三区四区| 国产性xxxx18免费观看视频| 一本久久青青| 国产精品免费久久久久影院| 亚乱亚乱亚洲乱妇| 欧美一区在线视频| 免费麻豆国产一区二区三区四区| 国产精品18久久久久久久网站| 日日噜噜夜夜狠狠久久丁香五月| 亚州一区二区| 欧美自拍大量在线观看| 国产一二在线观看| 在线电影欧美成精品| 青青草精品在线视频| 懂色av一区二区在线播放| 日韩中字在线观看| 九九精品久久| 国产又爽又黄的激情精品视频 | 夜夜春成人影院| 国产精品久久久久久一区二区| 男人天堂手机在线| 日韩精品一区二区三区四区视频| 久久久久久国产精品视频| 99re热这里只有精品视频| 免费日韩中文字幕| 亚洲精彩视频| 久久国产精品 国产精品| 欧美日韩不卡| 欧美大片网站在线观看| 日本啊v在线| 欧美精品久久久久久久多人混战 | 国产污在线观看| 久久久青草婷婷精品综合日韩| 亚洲国产精品视频一区| 深夜福利一区| 国产成人精品av在线| 国产传媒在线播放| 亚洲乱码国产乱码精品精| 97精品久久人人爽人人爽| 亚洲一区二区三区四区在线| 波多野结衣视频播放| 美女视频一区在线观看| 国产真人做爰毛片视频直播| 色135综合网| 国产区一区二区三区| 国产成人精品一区二区三区视频| 欧美高清视频免费观看| 福利成人在线观看| 亚洲第一精品夜夜躁人人躁 | 亚洲最新无码中文字幕久久| 日韩在线观看av| 日韩私人影院| 日韩免费在线观看| 伊人亚洲综合网| 日韩欧美中文在线| 久久精品一区二区三| 国产精品久久久久久久久久免费看| 看全色黄大色黄女片18| 久久国产福利国产秒拍| 久久人妻精品白浆国产| 亚洲啪啪91| 4444在线观看| 久久精品国内一区二区三区水蜜桃| 欧美成ee人免费视频| 粉嫩av一区二区| 成人3d动漫一区二区三区91| 欧美国产视频| 日韩免费在线观看视频| 都市激情国产精品| 欧美激情2020午夜免费观看| 免费的黄网站在线观看| 一区二区欧美日韩视频| 国产aaaaa毛片| 殴美一级特黄aaaaaa| 色欧美片视频在线观看在线视频| 日韩精品一区三区| 一区二区在线观看av| 精品国产国产综合精品| 欧美极品少妇xxxxⅹ高跟鞋| 最近中文字幕无免费| 国产91精品精华液一区二区三区 | 国产.欧美.日韩| 国产性生活一级片| 蓝色福利精品导航| 精品亚洲一区二区三区四区| 日本不卡视频在线观看| 日本www.色| 奇米亚洲午夜久久精品| 国产小视频精品| 麻豆成人免费电影| 国产乱女淫av麻豆国产| 久久精品国产一区二区| 一本一道久久a久久综合蜜桃| 蜜桃一区二区三区在线| 亚洲免费看av| 久久精品国产99久久6| 911福利视频| 国产激情91久久精品导航| 欧美人与性动交α欧美精品| 国产精品一级二级三级| 欧美一级片在线免费观看| 国产成人午夜精品影院观看视频 | 神马久久av| 蜜桃麻豆91| 精品国产乱码久久久久久蜜坠欲下 | 欧美99久久| 欧美亚洲日本一区二区三区| 国产一区白浆| 国产三级三级三级看三级| 日韩av不卡在线观看| 性欧美在线视频| 成人永久免费视频| 性久久久久久久久久| 中文字幕免费在线观看视频一区| 91香蕉视频污在线观看| 一区二区三区在线观看动漫| 久草视频在线观| 欧美午夜视频网站| www.日韩高清| 亚洲精品影视在线观看| av在线电影观看| 欧美精品免费在线观看| 亚洲少妇视频| 国产欧亚日韩视频| 风间由美一区二区av101| 欧美三级网色| 午夜毛片在线观看| 久久久亚洲综合| 黄色一级片一级片| 亚洲午夜精品久久久久久久久| 五月婷婷激情网| 欧美亚洲综合色| www..com国产| 欧美性少妇18aaaa视频| 国产乱人乱偷精品视频a人人澡| 欧美精品 日韩| 人妻精品一区二区三区| 亚洲午夜精品久久久久久性色| 毛片网站在线免费观看| 久久久久久久久久久网站| 奇米777日韩| 999在线观看免费大全电视剧| 日韩极品在线| 一级日韩一区在线观看| 国产美女诱惑一区二区| 亚洲精品20p| 久久综合网色—综合色88| 四季av中文字幕| 亚洲尤物视频在线| 在线观看不卡的av| 亚洲精品一线二线三线| 岛国最新视频免费在线观看| 欧美激情影音先锋| 在线看欧美视频| 91久久偷偷做嫩草影院| 成人一区而且| 日韩一级性生活片| 国产在线播放一区| 右手影院亚洲欧美| 一区二区欧美国产| 91国在线视频| 亚洲天堂第一页| 污视频网站免费在线观看| 国产精品视频专区| 日韩深夜福利| 加勒比成人在线| 国产精品一区在线观看你懂的| 91成年人网站| 欧美日韩国产中字| 国产日本精品视频| 亚洲毛片在线免费观看| 俺来俺也去www色在线观看| 91精品久久久久久久久久另类| 国产精品一在线观看| 丁香花在线影院观看在线播放| 激情综合五月天| 成年人免费视频播放| 欧美性受xxxx| 黄视频在线播放| 91精品国产九九九久久久亚洲| 97色婷婷成人综合在线观看| 亚洲精品在线免费看| 日韩精品成人一区二区在线| 亚洲av人人澡人人爽人人夜夜| 亚洲久草在线视频| 一级黄色片在线看| 精品国偷自产在线| 伦一区二区三区中文字幕v亚洲| 久久久久久高清| 美女久久一区| 国产中文字幕一区二区| 午夜伦理一区二区| 蜜桃久久一区二区三区| 欧美肥老妇视频| 成人偷拍自拍| 国产aaa免费视频| k8久久久一区二区三区| 国产精品99无码一区二区| 日韩精品最新网址| 国产网红女主播精品视频| y111111国产精品久久婷婷| 在线免费观看欧美| 亚洲一级Av无码毛片久久精品| 亚洲午夜免费电影| 手机福利在线| 国产不卡av在线| 亚洲人成网77777色在线播放| 欧美 国产 综合| 91麻豆蜜桃一区二区三区| 波多野结衣一区二区三区在线| 国产一区二区免费| 亚洲精品福利电影| 亚洲精美视频| 韩国一区二区三区| 国产亚洲小视频| 亚洲精品久久久久久久久久久| 欧洲av不卡| 亚洲最新在线| 精品无人码麻豆乱码1区2区| 精品无码av在线| 日韩国产欧美精品一区二区三区| 99re66热这里只有精品4| 先锋影音亚洲资源| 麻豆高清免费国产一区| 久久久久久久久久久久国产| 亚洲精品720p| 亚洲a成人v| 男人天堂手机在线视频| 国产色91在线| 国产视频手机在线观看| 久久精品久久久久| 欧美五码在线| 又色又爽又高潮免费视频国产| 樱花草国产18久久久久| 日本人妻丰满熟妇久久久久久| 国产精品国模在线| 欧美日韩1080p| 久久久高清视频| 欧美三级电影在线看| 日本高清在线观看| 欧美日韩一区二区视频在线| 精品一区二区日韩| 日本韩国欧美中文字幕| 最近日韩中文字幕中文| 成人资源在线| 亚洲午夜激情影院|