精品欧美一区二区三区在线观看 _久久久久国色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ù)棧公眾號

精品国产欧美一区二区| 亚洲伊人网站| 欧美日韩国产精品自在自线| 国产亚洲自拍偷拍| 国产一级免费av| 美女一区2区| 欧美性猛xxx| 欧洲久久久久久| 夜夜嗨aⅴ一区二区三区| 亚洲情侣在线| 国产美女视频免费看| 日韩a级片在线观看| 久久gogo国模啪啪裸体| 亚洲激情男女视频| 超碰porn在线| 亚洲午夜一区| 欧美精品一区二区三区蜜桃| 国产综合av在线| 成年人黄视频在线观看| 国产剧情在线观看一区| 日韩欧美国产视频| 日产国产精品精品a∨| 久久久久久久久久一级| 国产精品久久久久久久久久10秀 | 久久久999视频| 91久久久久国产一区二区| 成人亚洲一区二区一| 欧美一区二区三区播放老司机| 法国空姐在线观看免费| 日韩一级片免费在线观看| 免费亚洲视频| 久久精品男人天堂| 日本69式三人交| 成人欧美亚洲| 欧美色爱综合| 欧美美女喷水视频| 日韩美女爱爱视频| 国产女主播在线直播| 国内一区二区视频| 欧美激情亚洲激情| 亚洲xxxx在线| 欧美一区二区三区成人精品| 台湾佬中文娱乐久久久| 亚洲欧美精品午睡沙发| 欧美精品中文字幕一区二区| 国产女人爽到高潮a毛片| 91视频在线观看| 日韩avvvv在线播放| 欧美猛少妇色xxxxx| 欧美偷拍一区二区三区| youjizz欧美| 欧美美女一区二区| 日韩 欧美 高清| 2021天堂中文幕一二区在线观| 一色桃子久久精品亚洲| 日本一区二区久久精品| 亚洲国产一二三区| 精品一二三四在线| 国产精品福利网站| 久久一区二区三区视频| 欧美在线观看不卡| 欧美黄色一区二区| 综合网中文字幕| 一区二区三区少妇| 2023国产精华国产精品| 这里只有精品电影| 91福利免费观看| 韩日精品一区| 91国偷自产一区二区开放时间 | 中文在线a天堂| 国产精品美女久久久浪潮软件| 欧美成人午夜激情视频| 欧美一区二区三区免费看| 精品一区二区三区视频在线观看| 91爱视频在线| 国产成年人免费视频| 欧美精品自拍| 久久伊人精品视频| 国产真实乱在线更新| 欧美hentaied在线观看| 亚洲视频在线观看免费| 无码一区二区三区在线| 国产精品欧美在线观看| 亚洲精品中文字| 国产吞精囗交久久久| 久久悠悠精品综合网| 亚洲第一免费网站| 精品视频站长推荐| 欧美一级全黄| 亚洲香蕉成视频在线观看| 免费看黄色的视频| 成人毛片在线| 久久精品亚洲精品| 欧美极品aaaaabbbbb| 欧美精品综合| 欧美在线国产精品| 精品一区二区三区中文字幕视频| 国产亚洲成av人在线观看导航 | 欧美区一区二| 91av国产在线| 久久久久久久亚洲| 久草在线在线精品观看| 91视频国产高清| 丰满人妻av一区二区三区| 不卡电影免费在线播放一区| 久久大香伊蕉在人线观看热2| 欧美高清电影在线| 中文无字幕一区二区三区| 日本丰满少妇黄大片在线观看| 欧美6一10sex性hd| 欧美午夜片在线免费观看| 在线观看免费成人av| 欧美视频精品| 亚洲国产美女精品久久久久∴| 白丝女仆被免费网站| 成人在线电影在线观看视频| 欧美精品生活片| 国产真实乱偷精品视频| 日韩影院在线观看| 114国产精品久久免费观看| 性感美女视频一二三| 国产精品久久久久久妇女6080| 久草视频这里只有精品| 欧美精品总汇| 欧美成人a∨高清免费观看| 人妻精品久久久久中文字幕| 先锋资源久久| 18性欧美xxxⅹ性满足| 一道本无吗一区| 成人av中文字幕| 91手机视频在线| 97成人资源| 日韩欧美的一区| 欧美激情 一区| 亚洲精品三级| 91视频国产精品| 国产福利在线观看| 亚州成人在线电影| 五月天婷婷在线观看视频| 人妖一区二区三区| 欧美高清在线观看| 91精品人妻一区二区三区果冻| 99re热这里只有精品视频| 免费国产成人看片在线| 日本精品裸体写真集在线观看| 精品国产髙清在线看国产毛片| 美国一级片在线观看| 美女国产一区| 好吊妞www.84com只有这里才有精品| 嫩草香蕉在线91一二三区| 91久久精品午夜一区二区| 亚洲色图欧美另类| 亚洲欧美网站在线观看| 日韩美女福利视频| 熟妇高潮一区二区三区| 亚洲最大成人综合| 欧美激情第一区| 日韩欧美一区二区三区免费看| 91av视频在线观看| 亚洲免费成人在线| 亚洲美女偷拍久久| 国产免费中文字幕| 91欧美国产| 国产欧美婷婷中文| 你懂的在线看| 色狠狠av一区二区三区| 中文字幕在线永久| 一本久道久久久| 狠狠色综合色区| 狠狠操一区二区三区| 亚洲成人精品视频在线观看| www.超碰在线观看| 国产成人免费xxxxxxxx| av一区二区三区免费观看| 视频一区日韩精品| 欧美老少配视频| 国内老熟妇对白xxxxhd| 最新国产の精品合集bt伙计| 久久视频精品在线| 亚洲黄色一区二区三区| 日本精品在线免费观看| 久久这里只有| 日韩aⅴ视频一区二区三区| 91精品韩国| 一区二区亚洲欧洲国产日韩| 日韩综合在线观看| 国产人成一区二区三区影院| 亚洲最大综合网| 久久久久久美女精品| 7777精品伊久久久大香线蕉语言| 牛牛精品视频在线| 亚洲精品999| 欧美日韩一级黄色片| 国产欧美一区二区精品性色| 国产精品区在线| 日产精品一区二区| 亚洲最大的免费| 黄色在线免费观看网站| 国产亚洲人成网站在线观看| 91午夜交换视频| 亚洲一区在线看| 欧美做受喷浆在线观看| 欧美aaaaaa午夜精品| 樱空桃在线播放| 色婷婷av一区二区三区丝袜美腿| 国产精品jizz在线观看麻豆| 日韩免费网站| 91精品国产日韩91久久久久久| 久久一区二区三| 久久综合国产精品| 天天操狠狠操夜夜操| 欧美久久影院| 精品乱码一区二区三区| 色成人免费网站| 欧美人在线观看| 四虎精品成人免费网站| 欧美高清视频一二三区 | 天堂网中文字幕| 最好看的中文字幕久久| 制服丝袜第一页在线观看| 日本中文字幕一区二区视频| 男插女免费视频| 红桃视频在线观看一区二区| 51国偷自产一区二区三区| 亚洲性色av| 美女黄色丝袜一区| 国产午夜精品一区理论片| 欧美成人一区二区三区片免费 | 欧美精品99久久久**| 天天综合网入口| 亚洲男人天堂av网| 欧美黄色高清视频| 不卡一区二区在线| 五月天丁香花婷婷| 久久一区二区三区超碰国产精品| 粉嫩av一区二区三区天美传媒| 免费精品国产的网站免费观看| 91精品国产一区二区三区动漫| 欧美成a人片在线观看久| 欧美激情久久久| 黄色网页在线观看| 在线看欧美日韩| 色在线免费视频| 精品成a人在线观看| 国产美女明星三级做爰| 在线观看免费一区| 可以免费看的av毛片| 亚洲精品欧美在线| 日韩亚洲欧美中文字幕| 国产亚洲精品超碰| 在线天堂www在线国语对白| 激情综合五月婷婷| www.色就是色| 久久精品综合| 自慰无码一区二区三区| 99精品热6080yy久久| 国产成人艳妇aa视频在线| 亚洲啊v在线观看| 中文字幕99| 偷拍视屏一区| 欧美精品欧美精品| 神马香蕉久久| 美女被啪啪一区二区| 激情小说亚洲色图| 亚洲a区在线视频| 国产精品99久久免费| 国产又爽又黄的激情精品视频| 日本美女久久| 国产欧美一区二区| 国精产品一区一区三区四川| 日韩免费在线免费观看| 日本免费一区二区三区四区| 欧美在线免费观看| 蜜桃视频m3u8在线观看| 97视频在线观看免费| 久草在线资源站手机版| 97精品国产91久久久久久| 成人在线黄色电影| 日韩av免费在线看| 日本精品在线一区| 国产综合在线观看视频| 在线成人免费| 国产成人精品av| 欧美成人xxxx| 亚洲综合精品伊人久久| 国产厕拍一区| 国产欧美一区二区三区另类精品| 欧美调教视频| 亚洲视频在线二区| 91精品综合| av在线观看地址| 99国产精品| av免费网站观看| 久久丁香综合五月国产三级网站| 青青草精品在线| 北岛玲一区二区三区四区| 国产123在线| 亚洲网友自拍偷拍| 中文字幕久久熟女蜜桃| 精品国产精品网麻豆系列 | 欧美成年人在线观看| 亚洲精品mv| 91青青草免费在线看| 欧美美女一区| 亚洲熟妇无码一区二区三区| 久久精品国产一区二区| 人妻丰满熟妇aⅴ无码| 亚洲欧美国产毛片在线| 无码人妻丰满熟妇区五十路| 亚洲第一区在线观看| 欧美三级电影一区二区三区| 5566成人精品视频免费| 久久丁香四色| 亚洲一区高清| 日韩高清不卡在线| 性欧美18一19性猛交| 日韩av中文字幕在线| 久久久久久国产精品免费无遮挡| 91精品国产91久久| 日本在线成人| 亚洲一二三区在线| 视频一区中文字幕国产| 91精品人妻一区二区三区蜜桃2 | 亚洲免费高清| 在线观看视频你懂得| 国产精品免费久久| 国产无遮挡呻吟娇喘视频| 精品99一区二区三区| 黄色成人影院| 国产精品久久久久久久久久久久久久 | 无码一区二区精品| 亚洲精品中文字幕在线观看| 一本大道伊人av久久综合| 一区二区三区四区视频| 国产精欧美一区二区三区蓝颜男同| 国产精品v欧美精品∨日韩| 一区二区日韩欧美| 国产亚洲视频一区| 国产精品欧美久久久久一区二区 | 久久久久国产精品午夜一区| 一边摸一边做爽的视频17国产| 一区二区欧美精品| 国产丰满美女做爰| 久久高清视频免费| 精品国产亚洲一区二区三区| 少妇高潮流白浆| 国产精品自在在线| 欧美片一区二区| 亚洲成人黄色网址| 日本黄色免费在线| 欧美伦理一区二区| 日韩制服丝袜先锋影音| 亚洲图片第一页| 欧美麻豆精品久久久久久| 天天在线视频色| 成人一区二区电影| 一区二区三区国产精华| 无码国产精品一区二区免费式直播| 亚洲一区二区精品视频| 日本黄视频在线观看| 91av视频在线| heyzo久久| 污污的视频免费观看| 亚洲乱码中文字幕| 国产99999| 国语自产精品视频在免费| 日本中文字幕在线一区| 天堂在线资源视频| 亚洲视频1区2区| 黄色片网站免费在线观看| 97视频在线免费观看| 在线视频亚洲专区| 污污动漫在线观看| 亚洲激情中文1区| 午夜福利视频一区二区| 国产精品国产福利国产秒拍| 国产精品国内免费一区二区三区| 佐佐木明希电影| 91黄色激情网站| 曰本三级在线| 欧美第一黄网| 激情文学综合插| 日本少妇在线观看| 中文字幕久精品免费视频| 日韩一区二区三区高清在线观看| 日本欧美视频在线观看| 国产欧美一区在线| www.av在线.com| 日韩美女免费观看| 欧美日韩国内| 老熟妇一区二区| 精品国产一区二区三区久久影院| xx欧美xxx| 一本色道久久88亚洲精品综合| 91视频观看视频| 99久久精品国产一区二区成人| 国产91精品久久久| 欧美久久影院| 日韩一区二区三区四区视频| 精品国产乱码久久久久久久 |