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

您的位置:首頁技術(shù)文章
文章詳情頁

spring schedule配置多任務(wù)動(dòng)態(tài)cron(增刪啟停)

瀏覽:5日期:2023-07-19 16:55:24
一、背景

之前公司經(jīng)常會(huì)遇到配置定時(shí)任務(wù),簡單的任務(wù)可以直接依賴spring。簡單任務(wù)直接使用 @scheduled 注解配合@EnableScheduling。但是如何實(shí)現(xiàn)簡單的動(dòng)態(tài)cron呢?

開發(fā)原則:盡可能在項(xiàng)目本身去實(shí)現(xiàn),少依賴第三方框架,避免項(xiàng)目過于臃腫和復(fù)雜。

倆種任務(wù)調(diào)度方式:

spring schedule配置多任務(wù)動(dòng)態(tài)cron(增刪啟停)

二、本篇說明

springBoot 基礎(chǔ)模塊 spring-boot-starter-web 已經(jīng)內(nèi)置 schedule ,無需引入額外依賴。先思考幾個(gè)問題:

1、動(dòng)態(tài) cron 實(shí)現(xiàn)的原理

任務(wù)的 【 停止】是基于 future接口 的cancel() 方法。任務(wù)的 【增加、刪除、啟動(dòng)】是基于 注冊(cè)到 類ScheduledTaskRegistrar 的 ScheduledFuture的數(shù)量。涉及核心類:

ScheduledFuture SchedulingConfigurer ScheduledTaskRegistrar

2、多任務(wù)并行執(zhí)行配置spring默認(rèn)機(jī)制對(duì)schedule是單線程,需要配置多線程并行執(zhí)行。

3、如何配置多個(gè)任務(wù)好多博文,都是配置一個(gè)cron,這讓初學(xué)者很難受。

4、如何配置任務(wù)分組根據(jù)自己業(yè)務(wù)背景,可根據(jù)步驟三,進(jìn)行改造。

5、如何配置服務(wù)啟動(dòng)自啟任務(wù)。想要程序啟動(dòng)時(shí)首次去加我們?cè)O(shè)置的task,只需實(shí)現(xiàn) CommandLineRunner 即可。

6、如何從數(shù)據(jù)庫讀取配置這個(gè)其實(shí)很簡單,在實(shí)現(xiàn) ScheduledTaskRegistrar 時(shí),先直接查詢我們需要的數(shù)據(jù)即可。

7、如何優(yōu)雅的實(shí)現(xiàn)我們的代碼這里為了我們多個(gè)task實(shí)現(xiàn)時(shí),去除臃腫的if else ,使用策略模式去實(shí)現(xiàn)我們的task,這里代碼里面會(huì)具體介紹。

參考類圖:

spring schedule配置多任務(wù)動(dòng)態(tài)cron(增刪啟停)

8、如何去觸發(fā)我們的schedule 【增刪啟停】配置好 task任務(wù)類,注入到 controller ,通過接口直接調(diào)用即可。

三、代碼實(shí)現(xiàn)

先貼出我的github 代碼,下面代碼描述不全。

普通多任務(wù)動(dòng)態(tài)cron 分組多任務(wù)動(dòng)態(tài)cron1. 普通多任務(wù)動(dòng)態(tài)cron 實(shí)現(xiàn)

1.1 對(duì)應(yīng)數(shù)據(jù)庫的實(shí)體類 TaskEntity

@Data@AllArgsConstructor@NoArgsConstructorpublic class TaskEntity { /** * 任務(wù)id */ private int taskId; /** * 任務(wù)說明 */ private String desc; /** * cron 表達(dá)式 */ private String expression;}

1.2 配置每個(gè)任務(wù)實(shí)現(xiàn)

配置任務(wù)接口 TaskService

public interface TaskService { void HandlerJob(); Integer jobId();}

配置任務(wù)接口實(shí)現(xiàn) TaskServiceJob1Impl、TaskServiceJob2Impl …

@Servicepublic class TaskServiceJob1Impl implements TaskService { @Override public void HandlerJob() { System.out.println('------job1 開始執(zhí)行---------:'+new Date()); System.out.println(new SimpleDateFormat('yyyy-MM-dd HH:mm:ss').format(new Date()) + ' ' + Thread.currentThread().getName() + ' 任務(wù)一啟動(dòng)'); try { Thread.sleep(10000);//任務(wù)耗時(shí)10秒 } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(new SimpleDateFormat('yyyy-MM-dd HH:mm:ss').format(new Date()) + ' ' + Thread.currentThread().getName() + ' 結(jié)束'); } @Override public Integer jobId() { return 1; }}

1.3 配置任務(wù)解析器 TaskSolverChooser

注:這里引入策略模式為啥要配置 任務(wù)解析器選擇器:因?yàn)槲覀儗?shí)現(xiàn)多個(gè)任務(wù)時(shí),一個(gè)任務(wù)對(duì)應(yīng)一個(gè) CronTask,需要在 MyScheduledTask 里面去實(shí)現(xiàn)我們每一個(gè)方法。譬如,我們有100個(gè)任務(wù)就要自定義100個(gè)任務(wù)實(shí)現(xiàn)方法,代碼會(huì)很臃腫,明顯不符合,【開閉原則】,于是這里采用策略模式,解耦我們多個(gè)任務(wù)業(yè)務(wù)實(shí)現(xiàn)邏輯。

@Slf4j@Componentpublic class TaskSolverChooser implements ApplicationContextAware { private ApplicationContext applicationContext; private Map<Integer, TaskService> chooseMap = new HashMap<>(16); /** * 拿到spring context 上下文 */ @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { this.applicationContext = applicationContext; } @PostConstruct private void registerToTaskSolver(){ Map<String, TaskService> taskServiceMap = applicationContext.getBeansOfType(TaskService.class); for (TaskService value : taskServiceMap.values()) { chooseMap.put(value.jobId(), value); log.info('task {} 處理器: {} 注冊(cè)成功',new Object[]{value.jobId(),value}); } } /** * 獲取需要的job */ public TaskService getTask(Integer jobId){ return chooseMap.get(jobId); }}

1.4 配置MyScheduledTask (動(dòng)態(tài)cron核心配置)

說明:1、配置多線程執(zhí)行任務(wù)2、配置 刷新 task3、配置 停止 task4、配置 執(zhí)行task 業(yè)務(wù)邏輯

@Componentpublic class MyScheduledTask implements SchedulingConfigurer { private volatile ScheduledTaskRegistrar registrar; private final ConcurrentHashMap<Integer, ScheduledFuture<?>> scheduledFutures = new ConcurrentHashMap<>(); private final ConcurrentHashMap<Integer, CronTask> cronTasks = new ConcurrentHashMap<>(); @Autowired private TaskSolverChooser taskSolverChooser; @Override public void configureTasks(ScheduledTaskRegistrar registrar) { //設(shè)置20個(gè)線程,默認(rèn)單線程,如果不設(shè)置的話,不能同時(shí)并發(fā)執(zhí)行任務(wù) registrar.setScheduler(Executors.newScheduledThreadPool(10)); this.registrar = registrar; } /** * 修改 cron 需要 調(diào)用該方法 */ public void refresh(List<TaskEntity> tasks){ //取消已經(jīng)刪除的策略任務(wù) Set<Integer> sids = scheduledFutures.keySet(); for (Integer sid : sids) { if(!exists(tasks, sid)){scheduledFutures.get(sid).cancel(false); } } for (TaskEntity TaskEntity : tasks) { String expression = TaskEntity.getExpression(); //計(jì)劃任務(wù)表達(dá)式為空則跳過 if(!StringUtils.hasLength(expression)){continue; } //計(jì)劃任務(wù)已存在并且表達(dá)式未發(fā)生變化則跳過 if (scheduledFutures.containsKey(TaskEntity.getTaskId()) && cronTasks.get(TaskEntity.getTaskId()).getExpression().equals(expression)) {continue; } //如果策略執(zhí)行時(shí)間發(fā)生了變化,則取消當(dāng)前策略的任務(wù) if(scheduledFutures.containsKey(TaskEntity.getTaskId())){scheduledFutures.get(TaskEntity.getTaskId()).cancel(false);scheduledFutures.remove(TaskEntity.getTaskId());cronTasks.remove(TaskEntity.getTaskId()); } //業(yè)務(wù)邏輯處理 CronTask task = cronTask(TaskEntity, expression); //執(zhí)行業(yè)務(wù) ScheduledFuture<?> future = registrar.getScheduler().schedule(task.getRunnable(), task.getTrigger()); cronTasks.put(TaskEntity.getTaskId(), task); scheduledFutures.put(TaskEntity.getTaskId(), future); } } /** * 停止 cron 運(yùn)行 */ public void stop(List<TaskEntity> tasks){ tasks.forEach(item->{ if (scheduledFutures.containsKey(item.getTaskId())) {// mayInterruptIfRunning設(shè)成false話,不允許在線程運(yùn)行時(shí)中斷,設(shè)成true的話就允許。scheduledFutures.get(item.getTaskId()).cancel(false);scheduledFutures.remove(item.getTaskId()); } }); } /** * 業(yè)務(wù)邏輯處理 */ public CronTask cronTask(TaskEntity TaskEntity, String expression) { return new CronTask(() -> { //每個(gè)計(jì)劃任務(wù)實(shí)際需要執(zhí)行的具體業(yè)務(wù)邏輯 //采用策略,模式 ,執(zhí)行我們的job taskSolverChooser.getTask(TaskEntity.getTaskId()).HandlerJob();}, expression); } private boolean exists(List<TaskEntity> tasks, Integer tid){ for(TaskEntity TaskEntity:tasks){ if(TaskEntity.getTaskId() == tid){return true; } } return false; } @PreDestroy public void destroy() { this.registrar.destroy(); }}

1.5 配置程序啟動(dòng)時(shí)首次去加我們?cè)O(shè)置的task

@Componentpublic class StartInitTask implements CommandLineRunner { @Autowired private MyScheduledTask myScheduledTask; @Override public void run(String... args) throws Exception { List<TaskEntity> list = Arrays.asList(new TaskEntity(1, '測試1', '0/1 * * * * ?'),new TaskEntity(2, '測試2', '0/1 * * * * ?') ); myScheduledTask.refresh(list); }}

1.6 配置web接口去觸發(fā),增刪啟停

@RestControllerpublic class StartController { @Autowired private MyScheduledTask scheduledTask; @PostMapping(value = '/startOrChangeCron') public String changeCron(@RequestBody List<TaskEntity> list){ if (CollectionUtils.isEmpty(list)) { // 這里模擬存在數(shù)據(jù)庫的數(shù)據(jù) list = Arrays.asList( new TaskEntity(1, '測試1','0/1 * * * * ?') , new TaskEntity(2, '測試2','0/1 * * * * ?') ); } scheduledTask.refresh(list); return 'task任務(wù):' + list.toString() + '已經(jīng)開始運(yùn)行'; } @PostMapping(value = '/stopCron') public String stopCron(@RequestBody List<TaskEntity> list){ if (CollectionUtils.isEmpty(list)) { // 這里模擬將要停止的cron可通過前端傳來 list = Arrays.asList( new TaskEntity(1, '測試1','0/1 * * * * ?') , new TaskEntity(2, '測試2','0/1 * * * * ?') ); } scheduledTask.stop(list); List<Integer> collect = list.stream().map(TaskEntity::getTaskId).collect(Collectors.toList()); return 'task任務(wù):' + collect.toString() + '已經(jīng)停止啟動(dòng)'; }}2. 分組多任務(wù)動(dòng)態(tài)cron 實(shí)現(xiàn)

實(shí)現(xiàn)原理:基于反射實(shí)現(xiàn),根據(jù)方法全類名,去動(dòng)態(tài)執(zhí)行方法。多任務(wù)分組配置,根據(jù)任務(wù)類型進(jìn)行分組。eg:定時(shí)任務(wù)人員的相關(guān)操作,有檢測人員離職狀態(tài),人員業(yè)績達(dá)標(biāo),人員考勤…等,作用:對(duì)人員定時(shí)任務(wù)做一個(gè)分類,在同一個(gè)類里面去實(shí)現(xiàn)不同的task,比較《1. 普通多任務(wù)動(dòng)態(tài)cron 實(shí)現(xiàn)》,是一個(gè)類可以實(shí)現(xiàn)一個(gè)task《2. 分組多任務(wù)動(dòng)態(tài)cron 實(shí)現(xiàn)》,是一個(gè)類可以實(shí)現(xiàn)多個(gè)task詳細(xì)可參考: 分組多任務(wù)動(dòng)態(tài)cron

3 測試記錄

測試1 項(xiàng)目啟動(dòng)自啟TaskServiceJob1Impl和TaskServiceJob1Impl … 設(shè)置 阻塞10s觀察日志時(shí)間可發(fā)現(xiàn),已經(jīng)同時(shí)并發(fā)執(zhí)行倆個(gè)任務(wù)。

spring schedule配置多任務(wù)動(dòng)態(tài)cron(增刪啟停)

測試2 觸發(fā) 刷新【增、刪、啟】我們的task,。其實(shí)這里沒這么智能,如果需要觸發(fā)刷新接口,實(shí)際上是重新加載我們的task,就是對(duì)應(yīng)觸發(fā)我們,增加任務(wù)任務(wù),刪除任務(wù),啟動(dòng)任務(wù)。使用idea插件測試接口

spring schedule配置多任務(wù)動(dòng)態(tài)cron(增刪啟停)

觀察日志

spring schedule配置多任務(wù)動(dòng)態(tài)cron(增刪啟停)

測試3 觸發(fā) 停止接口,停止一個(gè)接口。這里測試略過…

四、總結(jié)

其實(shí)實(shí)現(xiàn)簡單的動(dòng)態(tài)配置,以上代碼可用,比較簡單。

到此這篇關(guān)于spring schedule配置多任務(wù)動(dòng)態(tài)cron(增刪啟停)的文章就介紹到這了,更多相關(guān)spring schedule 多任務(wù)動(dòng)態(tài)cron內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Spring
相關(guān)文章:
主站蜘蛛池模板: 久久精品中文字幕 | 国产成人在线视频 | 国产乡下妇女做爰视频 | 日韩免费观看视频 | 亚洲精品乱码久久久久久9色 | 国产精品久久久久久久久费观看 | 日韩在线中文字幕 | 操操日| 欧美黄视频在线观看 | 一区二区三区免费看 | 亚州中文字幕蜜桃视频 | 日本福利视频免费观看 | 国产福利在线播放 | 国产精品12 | 久久久久久久99精品免费观看 | 成年无码av片在线 | 亚洲一区成人在线 | 91久久夜色精品国产网站 | 亚洲免费成人 | 色综合久久88色综合天天 | 久久久久久精 | 国产精品www| 久久不卡日韩美女 | 91精品视频在线播放 | 色橹橹欧美在线观看视频高清 | 色伊人网| 久久人人爽人人爽人人片av软件 | 999久久久国产999久久久 | 影音先锋男人网 | 国产精品美女久久久久aⅴ国产馆 | 在线视频国产一区 | 一区视频在线 | 国产欧美精品区一区二区三区 | 欧美日韩电影一区二区 | jlzzjlzz国产精品久久 | 国产无区一区二区三麻豆 | 99精品国产高清一区二区麻豆 | 国产精品一区二区久久久久 | 中文成人在线 | 精品一区二区三区四区五区 | 伊人网在线视频观看 | 免费v片在线观看 | 中文字幕第56页 | 日本一区二区三区视频免费看 | 亚洲午夜性视频 | 一区二区三区免费av | 91精品久久久久久久久久久久久久久 | 亚洲不卡免费视频 | 亚洲精品乱码8久久久久久日本 | 亚洲一区在线日韩在线深爱 | 91精品欧美久久久久久动漫 | 国产精久久 | 亚洲成人激情在线观看 | 日韩在线精品视频 | 欧美日韩成人一区 | 成人免费视频 | 国产成人久久 | 国产高清在线精品一区二区三区 | 91精彩视频 | xx视频在线观看 | 久久久99日产 | 国内自拍第一页 | 中文字幕网在线 | 国产精品香蕉 | 人成亚洲 | 在线播放亚洲 | 国产精品久久久久aaaa九色 | 在线国产一区二区 | 日韩欧美一级精品久久 | 在线欧美一区 | 欧美一区二区三区电影 | 香蕉av777xxx色综合一区 | 性视频网站免费 | 亚洲专区在线播放 | 日韩另类| 亚洲精品在线看 | 国产综合精品一区二区三区 | 四虎欧美| 色综合久久久久综合99 | 中文字幕视频在线免费观看 | 亚洲欧美日韩精品久久奇米色影视 | 可以免费看黄的网站 | 精品国产一区二区三区久久久 | 欧美不卡| 可以在线观看的黄色 | 精品国产乱码久久久久久闺蜜 | 久久人人爽人人爽 | 欧美精品欧美激情 | 久久一区视频 | 人人澡人人草 | 亚洲欧美激情精品一区二区 | 亚洲高清电影 | 999精品在线 | 亚洲欧洲精品一区二区 | 男女羞羞视频在线观看 | 91小视频 | 国产 日韩 一区 | 在线免费毛片 | 亚洲自拍在线观看 | 毛片免费观看网址 | 亚洲高清免费 | 玖玖久久| 亚洲一区二区三区四区 | 日韩欧美一区二区在线 | 久久久www成人免费精品 | 国产成人精品亚洲日本在线观看 | 亚洲情综合五月天 | 在线99| 精品久久一二三区 | 日本免费xxxx| 三级色网站 | 亚洲欧美精选 | 亚洲 精品 综合 精品 自拍 | 国产一级一级特黄女人精品毛片 | 2019天天操 | 欧美精品被 | 国产96精品久久久 | 国产在线资源 | 亚洲欧美精品一区 | 成人免费视频在线观看 | 精品国产精品三级精品av网址 | 久草免费福利 | 欧美一区2区三区4区公司二百 | 成人在线免费观看 | 在线欧美亚洲 | 在线成人免费视频 | 蜜桃视频网站在线观看 | 丁香婷婷久久久综合精品国产 | 久草热8精品视频在线观看 亚洲区在线 | 亚洲二区在线观看 | 国产精品福利视频 | 国产人成精品一区二区三 | 黄网站涩免费蜜桃网站 | 欧美精品一区二区三区免费视频 | 亚洲国产视频一区 | 91中文在线观看 | 久久先锋 | 国产高清在线 | 夜夜夜操操操 | 亚洲精品专区 | 欧美日韩一级在线观看 | 色综合久久一区二区三区 | 日韩久久午夜一级啪啪 | 国产精品久久久久久久久久久久久 | 国产视频福利在线观看 | 综合久久综合久久 | 欧美激情欧美激情在线五月 | 国产操片 | 午夜视频一区二区 | 亚洲 欧美 激情 另类 校园 | 亚洲高清视频在线观看 | 欧美精品一区二区在线观看 | 亚洲网在线 | 精品国产91亚洲一区二区三区www | 中文字幕大全 | 先锋av资源在线 | 成人福利在线观看 | 最新国产在线 | 91麻豆精品国产91久久久资源速度 | 在线看国产| 国产精品伦一区二区三级视频 | 极品白嫩少妇无套内谢 | 天天操夜夜操av | 九九综合九九 | 久久久亚洲一区二区三区 | 久久一二三区 | 国内精品一区二区三区 | 青草成人免费视频 | 国产一区二区影院 | 国产99999| 成人夜晚看av | 欧美精品a∨在线观看不卡 欧美日韩中文字幕在线播放 | 国产一区二区av | 久久99这里只有精品 | 欧美日韩一区二区三区在线观看 | 亚洲伦理在线 | 中文字幕在线免费观看 | 天天操网 | 91精品国产91久久久久久久久久久久 | 国产一区二区三区在线免费观看 | 久久亚洲一区 | 四虎com| 成人a在线视频免费观看 | 99re在线观看 | 国产免费一区二区三区网站免费 | 欧美日产国产成人免费图片 | 一区二区精品在线 | 亚洲福利一区二区 | 亚洲精品一二三四五区 | 性一交一乱一透一a级 | 天天爱爱网 | 久久精品一区二区三区四区 | 亚洲一区二区在线电影 | 一区二区三区精品 | 亚洲天堂色2017 | 亚洲最色视频 | 久久久久久久久久久久91 | 亚洲精品中文字幕 | 青青操av| 久久手机在线视频 | 亚洲黄网在线观看 | 国产精品国产三级国产aⅴ中文 | 精品国产一区在线 | 欧美成人精品一区二区男人看 | 日本一区二区三区四区 | 91福利在线导航 | 亚洲黄色a级| 在线亚州 | 亚洲一区二区在线视频 | 亚洲一区二区久久 | 国产亚洲精品美女久久久久久久久久 | 亚洲夜幕久久日韩精品一区 | 久久精品免费视频观看 | 你懂的在线视频播放 | 成人片网址 | 亚洲国产成人av好男人在线观看 | 国产精品免费看 | 亚洲视频在线播放 | 天天干天天av | 在线观看成人网 | 一区二区在线视频 | 国产片久久 | 91国视频| 91小视频 | 狠狠做深爱婷婷综合一区 | the蜜臀av入口 | www.啪啪 | 久久久久久久久久久亚洲 | 国产精品一区二区三区四区 | 日韩精品亚洲专区在线观看 | 精品国产一区二区三区久久久 | 欧美日韩成人在线 | 亚洲精品专区 | 亚洲精品视频在线播放 | 狠狠爱www人成狠狠爱综合网 | 国产精品第一国产精品 | 午夜影院男女 | 狠狠综合久久 | 亚洲欧美中文字幕 | 国产高清不卡 | 天天干,夜夜操 | 九九精品视频在线观看 | 男女羞羞视频网站18 | 日本免费在线视频 | 国产一区二区三区四区 | 日韩高清在线一区 | 久久久夜夜夜 | 羞羞视频在线观看视频 | 日本久久www成人免 成人久久久久 | 欧美一级毛片免费看 | 国产精品福利91 | 久久精品一区二区三区不卡牛牛 | 免费啪啪网站 | 国产欧美日本 | 国产精品1区2区 | 欧美久久久精品 | 成人午夜电影在线 | 欧美狠狠操 | 电影午夜精品一区二区三区 | 国产精品一卡二卡三卡 | 国产成人61精品免费看片 | 北条麻妃一区二区三区在线观看 | 麻豆久久久9性大片 | 色猫猫国产区一区二在线视频 | 成人精品一区二区三区中文字幕 | www.色综合| 国产中文字幕在线观看 | 国产成人一级片 | 国产羞羞视频在线观看 | 欧美精品一区二区三区四区五区 | 黄色一级片黄色一级片 | 国产精品毛片一区二区三区 | 一级毛片免费完整视频 | 99re在线免费 | 国产日韩欧美在线 | 午夜激情视频 | 黄色国产一级视频 | 国产免费一区二区三区网站免费 | 91.成人天堂一区 | 国产成人精品一区二区在线 | 色综合成人 | 日日视频 | 天天操天天干天天爽 | 日韩h视频| 久久精品1区 | 91爱爱网 | 日韩高清在线一区 | 国产在线二区 | 国产一区二区视频免费 | 黄色高清视频在线观看 | 色婷婷综合久久久中文字幕 | 亚洲精品四区 | 国产欧美一区二区精品忘忧草 | www.国产精品 | 国产福利在线观看视频 | 午夜影院免费看 | www精品美女久久久tv | 色综合久久久久 | 羞羞视频网站在线看 | 国产日韩视频 | 国产精品久久久久一区二区三区共 | 免费看91| 一级在线观看视频 | 国产成人精品久久 | 国产成人福利视频 | 久久日本视频 | 成人免费看 | 久久高清 | 亚洲一区二区三区在线 | 国产精品久久久久一区二区三区 | 视频在线亚洲 | 国产成人精品一区二区三区网站观看 | 欧洲精品视频一区 | 成人在线观看中文字幕 | 古风h啪肉1v1摄政王 | 天天综合91| 午夜寂寞少妇aaa片毛片 | 亚洲国产成人一区二区精品区 | 成人黄色在线视频 | av第一页| 日韩91视频| 91在线看 | 欧美一区二区三区在线视频观看 | 亚洲精品66 | 男女免费在线观看视频 | 国产精品原创av | 五月综合婷 | 欧美1区2区3区 | 99这里只有精品视频 | 国产精品精品视频一区二区三区 | 91精品国产91久久久久久吃药 | 国产一区二区三区免费视频 | 久久久久久亚洲 | 欧美日韩精品一区二区三区 | 在线观看国产wwwa级羞羞视频 | 国产一级片在线播放 | 毛片99 | 国产性网| 国产精品1区2区3区 欧美 中文字幕 | 成人a视频在线观看 | 亚洲人人 | 精品国产乱码久久久久久密桃99 | 亚洲中午字幕 | 91在线播放视频 | 欧美一区二区三区在线观看视频 | 免费成人高清在线视频 | 国产电影一区二区三区图片 | 亚洲 中文 欧美 日韩 在线观看 | 久久青青操| 国产精品视频免费 | 在线观看成人小视频 | 亚洲一区二区在线免费观看 | 亚洲精品专区 | 亚洲一区二区中文 | 国产一区二区精品在线观看 | 日韩免费一区二区 | 91亚洲精品在线观看 | 蜜桃视频成人m3u8 | 国产一区精品在线 | 久久久99国产精品免费 | 欧美黑人一级毛片 | 日韩欧美国产精品综合嫩v 亚洲欧美日韩在线 | 91综合网 | 蜜桃中文字幕 | 欧美日韩国产一区二区三区 | 久久成人免费 | 蜜桃视频一区二区 | 成人黄页在线观看 | 亚洲午夜电影 | 91精品久久 | 亚洲天堂一区二区 | 亚洲精品一区二区三区 | 天堂va在线高清一区 | 色视频网站在线观看 | 国产成人高清精品免费5388 | 精品成人免费一区二区在线播放 | 午夜免费福利视频 | 久在线观看 | 午夜精品一区二区三区在线观看 | 天堂在线一区二区 | 国产精品第一国产精品 | 在线免费观看av片 | 日韩欧美二区 | 国产成人在线视频 | 久操成人 | 手机在线不卡av | 日日碰碰 | 99国产精品久久久久久久 | 精品久久久蜜桃 | 日韩精品在线观看视频 | 久久精品亚洲一区二区 | 国产精品久久毛片 | 日日躁夜夜操 | 亚洲国产精品成人综合色在线婷婷 | 夫妻午夜影院 | 久草网站| 日韩欧美中文字幕在线视频 | 午夜影晥 | 欧美激情精品久久久久久 | 精品一二三区 | 欧美一区二区三区免费 | 午夜影视av| 亚洲第一黄色 | 99久久婷婷 | 成人免费观看男女羞羞视频 | 91精品国产91综合久久蜜臀 | 久久亚洲免费 | 亚洲免费影院 | 99国产精品久久久久久久 | 国产激情一区二区三区 | 久草免费在线 | 毛片网络 | 色视频网站在线观看 | 国产特级毛片 | 91精品国产综合久久福利软件 | 激情五月综合 | 国产在线观看一区二区 | 欧美日韩不卡视频 | 男人天堂中文字幕 | 精品久久ai | 中文字幕在线观看免费 | 久久九九国产精品 | 久热伊人 | 久久久.com | 亚洲免费看片 | 亚洲天堂久久 | 国产精品久久久久久久久软件 | 久久精品在线 | 日韩一区二区在线视频 | 超碰最新在线 | 中文字幕免费看 | 日本一区二区精品视频 | av黄色在线播放 | 国产h视频在线观看 | 最新av片| 日韩av资源站 | 亚洲精品影院 | 国产在线不卡 | 久久精品国产视频 | 久久久久久久av | 狠狠操一区二区三区 | 亚洲一区视频在线播放 | 97色免费视频 | 久草电影网 | 91精品国产综合久久国产大片 | 免费成人在线电影 | 另类一区 | 亚洲三级在线 | 一区视频 | 国产精品久久久久久一区二区三区 | 日韩一区精品视频 | 中文字幕在线观看一区二区三区 | 国产成人午夜高潮毛片 | 国产精品久久久久久久久免费 | 中文字幕 欧美 日韩 | 91久久久久久久久 | 日韩欧美在线免费观看 | 在线视频久 | 天天av网 | 亚洲三级在线看 | 亚洲毛片网站 | 久久精品 | 久久综合一区二区 | 国产精品地址 | 天天草天天干天天 | 91影院在线观看 | 免费观看成人性生生活片 | 99精品欧美一区二区蜜桃免费 | 日韩在线免费视频 | 欧美高清成人 | 国产精品久久久久久一区二区三区 | 一区二区日韩精品 | 中文字幕一区在线观看视频 | 九九色综合 | 国产精品99久久久久 | 婷婷五月色综合 | 91社区影院 | 国产一级一级特黄女人精品毛片 | 欧美日韩国产一区二区在线观看 | 日韩城人免费 | 亚洲欧美日韩精品久久亚洲区 | 午夜寂寞少妇aaa片毛片 | 婷婷激情五月 | 亚洲视频中文字幕 | 午夜精品成人一区二区 | 日本一级中文字幕久久久久久 | 久久成人国产 | 国产九九九| 欧美日韩亚洲视频 | 欧美日韩成人一区 | 91国内精品久久 | 欧产日产国产一区 | 91精品综合久久久久久五月天 | 精品久久久久久亚洲综合网站 | 精品一区二区三区免费视频 | 激情欧美一区二区三区中文字幕 | 久一久久 | 亚洲精品免费视频 | 午夜视频在线免费观看 | 亚洲精品日韩激情欧美 | 免费在线成人网 | 99亚洲精品| 91se在线 | 国产成人在线播放 | 色婷婷欧美 | 成人99| 成人一区二区av | 艳妇荡乳豪妇荡淫 | 亚洲免费人成在线视频观看 | 亚洲www视频 | 欧美视频精品在线观看 | 亚洲欧美成人影院 | av大片 | 亚洲人人| 日日干天天干 | 欧美成人综合 | 午夜精选视频 | 国产精品成人在线观看 | 中午字幕在线观看 | 国产性久久 | 国产真实精品久久二三区 | 日韩三级中文字幕 | 国产一级片播放 | 国产激情网站 | 精品久久一区 | 一区二区三区在线播放 | 亚洲国产精品一区二区第一页 | 99视频在线 | 亚洲视频中文字幕 | 色欧美片视频在线观看 | 在线看片福利 | 欧美自拍视频在线观看 | 亚色在线 | 三级视频网站 | 亚洲成人久久久 | 亚洲午夜精品一区二区三区他趣 | 亚洲精品视频免费 | 欧美日韩国产一区二区三区在线观看 | 亚洲精品视频在线 | 久草免费福利 | 日韩中字在线观看 | 亚洲福利国产 | 91夜夜操| 色av综合| 国产精品久久久久久中文字 | 欧美激情一区二区三区蜜桃视频 | 中文日韩在线 | 日韩精品一区二区三区在线播放 | 澳门av| 龙珠z普通话国语版在线观看 | 黄色地址 | 日韩精品区 | 99精品欧美一区二区三区综合在线 | 久草免费在线视频 | 国产精品乱码一区二区三区 | 国产成人精品久久二区二区 | 欧美日韩精品一区二区 | 欧美成人一区二区三区片免费 | 国产精品久久av | 亚洲热av | 亚洲精品久久久久999中文字幕 | 国产成人不卡 | 黄色手机在线观看 | 日日干夜夜操 | 国产亚洲成av人片在线观看桃 | 91高清视频在线观看 | 日韩欧美在线视频免费观看 | 91欧美激情一区二区三区成人 | 久久99久久久久 | 久久91精品 | 国产成人精品亚洲777人妖 | www.久久久.com | 国产日韩欧美精品一区二区三区 | 91在线视频免费观看 | 日韩免费网 | 国产精品免费一区二区三区四区 | 欧美日韩一区在线 | 久色视频 | 成人h动漫精品一区二区器材 | 香蕉成人啪国产精品视频综合网 | 精品久久国产 | 五月色综合 | 精品视频在线免费 | 日韩日韩日韩日韩日韩日韩日韩 | 国产1页 | 日韩成人影院在线观看 | 亚洲天天操| 色婷婷亚洲| 色视频一区二区三区 | 欧美精品1区 | 中文字幕av在线播放 | 操操操操网 | 欧美美女黄色网 | 九九视频这里只有精品 | 亚洲国产精品99久久久久久久久 | 欧洲视频一区二区 | 亚州国产精品视频 | 欧美日韩国产一区二区 | av在线大全| 在线播放国产一区二区三区 | 午夜精品久久久久99蜜 | 国精品一区 | 一区不卡 | 欧美日韩视频网站 | 欧美一区二区三区免费电影 | 国产一级免费 | 欧美一区三区 | 91精品综合久久久久久五月天 | 日韩欧美综合 | 夜夜草天天干 | 亚洲免费视频在线观看 | 狠狠操网站 | 中文字幕亚洲综合久久久软件 | 一区二区精品在线 | 激情一区|