国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频

告別硬編碼,SpringBoot實(shí)現(xiàn)動(dòng)態(tài)增刪啟停定時(shí)任務(wù)

共 27292字,需瀏覽 55分鐘

 ·

2021-09-08 00:29

在spring boot項(xiàng)目中,可以通過(guò)@EnableScheduling注解和@Scheduled注解實(shí)現(xiàn)定時(shí)任務(wù),也可以通過(guò)SchedulingConfigurer接口來(lái)實(shí)現(xiàn)定時(shí)任務(wù)。但是這兩種方式不能動(dòng)態(tài)添加、刪除、啟動(dòng)、停止任務(wù)。

要實(shí)現(xiàn)動(dòng)態(tài)增刪啟停定時(shí)任務(wù)功能,比較廣泛的做法是集成Quartz框架。但是本人的開發(fā)原則是:在滿足項(xiàng)目需求的情況下,盡量少的依賴其它框架,避免項(xiàng)目過(guò)于臃腫和復(fù)雜。

查看spring-context這個(gè)jar包中org.springframework.scheduling.ScheduledTaskRegistrar這個(gè)類的源代碼,發(fā)現(xiàn)可以通過(guò)改造這個(gè)類就能實(shí)現(xiàn)動(dòng)態(tài)增刪啟停定時(shí)任務(wù)功能。

定時(shí)任務(wù)列表頁(yè)
定時(shí)任務(wù)執(zhí)行日志

添加執(zhí)行定時(shí)任務(wù)的線程池配置類

@Configuration  
public class SchedulingConfig {  
    @Bean  
    public TaskScheduler taskScheduler() {  
        ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();  
        // 定時(shí)任務(wù)執(zhí)行線程池核心線程數(shù)  
        taskScheduler.setPoolSize(4);  
        taskScheduler.setRemoveOnCancelPolicy(true);  
        taskScheduler.setThreadNamePrefix("TaskSchedulerThreadPool-");  
        return taskScheduler;  
    }  
}  

添加ScheduledFuture的包裝類。ScheduledFuture是ScheduledExecutorService定時(shí)任務(wù)線程池的執(zhí)行結(jié)果。

public final class ScheduledTask {  
  
    volatile ScheduledFuture<?> future;  
  
    /**  
     * 取消定時(shí)任務(wù)  
     */
  
    public void cancel() {  
        ScheduledFuture<?> future = this.future;  
        if (future != null) {  
            future.cancel(true);  
        }  
    }  
}  

添加Runnable接口實(shí)現(xiàn)類,被定時(shí)任務(wù)線程池調(diào)用,用來(lái)執(zhí)行指定bean里面的方法。

public class SchedulingRunnable implements Runnable {  
  
    private static final Logger logger = LoggerFactory.getLogger(SchedulingRunnable.class);  
  
    private String beanName;  
  
    private String methodName;  
  
    private String params;  
  
    public SchedulingRunnable(String beanName, String methodName) {  
        this(beanName, methodName, null);  
    }  
  
    public SchedulingRunnable(String beanName, String methodName, String params) {  
        this.beanName = beanName;  
        this.methodName = methodName;  
        this.params = params;  
    }  
  
    @Override  
    public void run() {  
        logger.info("定時(shí)任務(wù)開始執(zhí)行 - bean:{},方法:{},參數(shù):{}", beanName, methodName, params);  
        long startTime = System.currentTimeMillis();  
  
        try {  
            Object target = SpringContextUtils.getBean(beanName);  
  
            Method method = null;  
            if (StringUtils.isNotEmpty(params)) {  
                method = target.getClass().getDeclaredMethod(methodName, String.class);  
            } else {  
                method = target.getClass().getDeclaredMethod(methodName);  
            }  
  
            ReflectionUtils.makeAccessible(method);  
            if (StringUtils.isNotEmpty(params)) {  
                method.invoke(target, params);  
            } else {  
                method.invoke(target);  
            }  
        } catch (Exception ex) {  
            logger.error(String.format("定時(shí)任務(wù)執(zhí)行異常 - bean:%s,方法:%s,參數(shù):%s ", beanName, methodName, params), ex);  
        }  
  
        long times = System.currentTimeMillis() - startTime;  
        logger.info("定時(shí)任務(wù)執(zhí)行結(jié)束 - bean:{},方法:{},參數(shù):{},耗時(shí):{} 毫秒", beanName, methodName, params, times);  
    }  
  
    @Override  
    public boolean equals(Object o) {  
        if (this == o) return true;  
        if (o == null || getClass() != o.getClass()) return false;  
        SchedulingRunnable that = (SchedulingRunnable) o;  
        if (params == null) {  
            return beanName.equals(that.beanName) &&  
                    methodName.equals(that.methodName) &&  
                    that.params == null;  
        }  
  
        return beanName.equals(that.beanName) &&  
                methodName.equals(that.methodName) &&  
                params.equals(that.params);  
    }  
  
    @Override  
    public int hashCode() {  
        if (params == null) {  
            return Objects.hash(beanName, methodName);  
        }  
  
        return Objects.hash(beanName, methodName, params);  
    }  
}  

添加定時(shí)任務(wù)注冊(cè)類,用來(lái)增加、刪除定時(shí)任務(wù)。

@Component  
public class CronTaskRegistrar implements DisposableBean {  
  
    private final Map<Runnable, ScheduledTask> scheduledTasks = new ConcurrentHashMap<>(16);  
  
    @Autowired  
    private TaskScheduler taskScheduler;  
  
    public TaskScheduler getScheduler() {  
        return this.taskScheduler;  
    }  
  
    public void addCronTask(Runnable task, String cronExpression) {  
        addCronTask(new CronTask(task, cronExpression));  
    }  
  
    public void addCronTask(CronTask cronTask) {  
        if (cronTask != null) {  
            Runnable task = cronTask.getRunnable();  
            if (this.scheduledTasks.containsKey(task)) {  
                removeCronTask(task);  
            }  
  
            this.scheduledTasks.put(task, scheduleCronTask(cronTask));  
        }  
    }  
  
    public void removeCronTask(Runnable task) {  
        ScheduledTask scheduledTask = this.scheduledTasks.remove(task);  
        if (scheduledTask != null)  
            scheduledTask.cancel();  
    }  
  
    public ScheduledTask scheduleCronTask(CronTask cronTask) {  
        ScheduledTask scheduledTask = new ScheduledTask();  
        scheduledTask.future = this.taskScheduler.schedule(cronTask.getRunnable(), cronTask.getTrigger());  
  
        return scheduledTask;  
    }  
  
  
    @Override  
    public void destroy() {  
        for (ScheduledTask task : this.scheduledTasks.values()) {  
            task.cancel();  
        }  
  
        this.scheduledTasks.clear();  
    }  
}  

添加定時(shí)任務(wù)示例類

@Component("demoTask")  
public class DemoTask {  
    public void taskWithParams(String params) {  
        System.out.println("執(zhí)行有參示例任務(wù):" + params);  
    }  
  
    public void taskNoParams() {  
        System.out.println("執(zhí)行無(wú)參示例任務(wù)");  
    }  
}  

定時(shí)任務(wù)數(shù)據(jù)庫(kù)表設(shè)計(jì)

定時(shí)任務(wù)數(shù)據(jù)庫(kù)表設(shè)計(jì)

添加定時(shí)任務(wù)實(shí)體類

public class SysJobPO {  
    /**  
     * 任務(wù)ID  
     */
  
    private Integer jobId;  
    /**  
     * bean名稱  
     */
  
    private String beanName;  
    /**  
     * 方法名稱  
     */
  
    private String methodName;  
    /**  
     * 方法參數(shù)  
     */
  
    private String methodParams;  
    /**  
     * cron表達(dá)式  
     */
  
    private String cronExpression;  
    /**  
     * 狀態(tài)(1正常 0暫停)  
     */
  
    private Integer jobStatus;  
    /**  
     * 備注  
     */
  
    private String remark;  
    /**  
     * 創(chuàng)建時(shí)間  
     */
  
    private Date createTime;  
    /**  
     * 更新時(shí)間  
     */
  
    private Date updateTime;  
  
    public Integer getJobId() {  
        return jobId;  
    }  
  
    public void setJobId(Integer jobId) {  
        this.jobId = jobId;  
    }  
  
    public String getBeanName() {  
        return beanName;  
    }  
  
    public void setBeanName(String beanName) {  
        this.beanName = beanName;  
    }  
  
    public String getMethodName() {  
        return methodName;  
    }  
  
    public void setMethodName(String methodName) {  
        this.methodName = methodName;  
    }  
  
    public String getMethodParams() {  
        return methodParams;  
    }  
  
    public void setMethodParams(String methodParams) {  
        this.methodParams = methodParams;  
    }  
  
    public String getCronExpression() {  
        return cronExpression;  
    }  
  
    public void setCronExpression(String cronExpression) {  
        this.cronExpression = cronExpression;  
    }  
  
    public Integer getJobStatus() {  
        return jobStatus;  
    }  
  
    public void setJobStatus(Integer jobStatus) {  
        this.jobStatus = jobStatus;  
    }  
  
    public String getRemark() {  
        return remark;  
    }  
  
    public void setRemark(String remark) {  
        this.remark = remark;  
    }  
  
    public Date getCreateTime() {  
        return createTime;  
    }  
  
    public void setCreateTime(Date createTime) {  
        this.createTime = createTime;  
    }  
  
    public Date getUpdateTime() {  
        return updateTime;  
    }  
  
    public void setUpdateTime(Date updateTime) {  
        this.updateTime = updateTime;  
    }  
  
}  

新增定時(shí)任務(wù)

新增定時(shí)任務(wù)
boolean success = sysJobRepository.addSysJob(sysJob);  
if (!success)  
    return OperationResUtils.fail("新增失敗");  
else {  
    if (sysJob.getJobStatus().equals(SysJobStatus.NORMAL.ordinal())) {  
        SchedulingRunnable task = new SchedulingRunnable(sysJob.getBeanName(), sysJob.getMethodName(), sysJob.getMethodParams());  
        cronTaskRegistrar.addCronTask(task, sysJob.getCronExpression());  
    }  
}  
  
return OperationResUtils.success();  

修改定時(shí)任務(wù),先移除原來(lái)的任務(wù),再啟動(dòng)新任務(wù)

boolean success = sysJobRepository.editSysJob(sysJob);  
if (!success)  
    return OperationResUtils.fail("編輯失敗");  
else {  
    //先移除再添加  
    if (existedSysJob.getJobStatus().equals(SysJobStatus.NORMAL.ordinal())) {  
        SchedulingRunnable task = new SchedulingRunnable(existedSysJob.getBeanName(), existedSysJob.getMethodName(), existedSysJob.getMethodParams());  
        cronTaskRegistrar.removeCronTask(task);  
    }  
  
    if (sysJob.getJobStatus().equals(SysJobStatus.NORMAL.ordinal())) {  
        SchedulingRunnable task = new SchedulingRunnable(sysJob.getBeanName(), sysJob.getMethodName(), sysJob.getMethodParams());  
        cronTaskRegistrar.addCronTask(task, sysJob.getCronExpression());  
    }  
}  
  
return OperationResUtils.success();  

刪除定時(shí)任務(wù)

boolean success = sysJobRepository.deleteSysJobById(req.getJobId());  
if (!success)  
    return OperationResUtils.fail("刪除失敗");  
else{  
    if (existedSysJob.getJobStatus().equals(SysJobStatus.NORMAL.ordinal())) {  
        SchedulingRunnable task = new SchedulingRunnable(existedSysJob.getBeanName(), existedSysJob.getMethodName(), existedSysJob.getMethodParams());  
        cronTaskRegistrar.removeCronTask(task);  
    }  
}  
  
return OperationResUtils.success();  

定時(shí)任務(wù)啟動(dòng)/停止?fàn)顟B(tài)切換

if (existedSysJob.getJobStatus().equals(SysJobStatus.NORMAL.ordinal())) {  
    SchedulingRunnable task = new SchedulingRunnable(existedSysJob.getBeanName(), existedSysJob.getMethodName(), existedSysJob.getMethodParams());  
    cronTaskRegistrar.addCronTask(task, existedSysJob.getCronExpression());  
else {  
    SchedulingRunnable task = new SchedulingRunnable(existedSysJob.getBeanName(), existedSysJob.getMethodName(), existedSysJob.getMethodParams());  
    cronTaskRegistrar.removeCronTask(task);  
}  

添加實(shí)現(xiàn)了CommandLineRunner接口的SysJobRunner類,當(dāng)spring boot項(xiàng)目啟動(dòng)完成后,加載數(shù)據(jù)庫(kù)里狀態(tài)為正常的定時(shí)任務(wù)。

@Service  
public class SysJobRunner implements CommandLineRunner {  
  
    private static final Logger logger = LoggerFactory.getLogger(SysJobRunner.class);  
  
    @Autowired  
    private ISysJobRepository sysJobRepository;  
  
    @Autowired  
    private CronTaskRegistrar cronTaskRegistrar;  
  
    @Override  
    public void run(String... args) {  
        // 初始加載數(shù)據(jù)庫(kù)里狀態(tài)為正常的定時(shí)任務(wù)  
        List<SysJobPO> jobList = sysJobRepository.getSysJobListByStatus(SysJobStatus.NORMAL.ordinal());  
        if (CollectionUtils.isNotEmpty(jobList)) {  
            for (SysJobPO job : jobList) {  
                SchedulingRunnable task = new SchedulingRunnable(job.getBeanName(), job.getMethodName(), job.getMethodParams());  
                cronTaskRegistrar.addCronTask(task, job.getCronExpression());  
            }  
  
            logger.info("定時(shí)任務(wù)已加載完畢...");  
        }  
    }  
}  

工具類SpringContextUtils,用來(lái)從spring容器里獲取bean

@Component  
public class SpringContextUtils implements ApplicationContextAware {  
  
    private static ApplicationContext applicationContext;  
  
    @Override  
    public void setApplicationContext(ApplicationContext applicationContext)  
            throws BeansException 
{  
        SpringContextUtils.applicationContext = applicationContext;  
    }  
  
    public static Object getBean(String name) {  
        return applicationContext.getBean(name);  
    }  
  
    public static <T> getBean(Class<T> requiredType) {  
        return applicationContext.getBean(requiredType);  
    }  
  
    public static <T> getBean(String name, Class<T> requiredType) {  
        return applicationContext.getBean(name, requiredType);  
    }  
  
    public static boolean containsBean(String name) {  
        return applicationContext.containsBean(name);  
    }  
  
    public static boolean isSingleton(String name) {  
        return applicationContext.isSingleton(name);  
    }  
  
    public static Class<? extends Object> getType(String name) {  
        return applicationContext.getType(name);  
    }  
}

本文完,參考本文代碼可成功運(yùn)行,親測(cè)!

(感謝閱讀,希望對(duì)你所有幫助)
來(lái)源:www.jianshu.com/p/0f68936393fd


瀏覽 32
點(diǎn)贊
評(píng)論
收藏
分享

手機(jī)掃一掃分享

分享
舉報(bào)
評(píng)論
圖片
表情
推薦
點(diǎn)贊
評(píng)論
收藏
分享

手機(jī)掃一掃分享

分享
舉報(bào)

感谢您访问我们的网站,您可能还对以下资源感兴趣:

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 浮力影院久久| 精品亚洲一区二区三区四区五区| 91欧美精品成人AAA片| 国产精品无码激情视频| 精品久久久久久AV2025 | 婷婷激情五月综合| 韩国高清无码60.70.80| 精品在线播放| 射久久| 亚洲AV男人天堂| 中文字幕视频网站| 黄色在线视频网站| 日韩人妻码一区二区三区| 精品国产va久久久久久久| 中文字幕+乱码+中文乱码视频在线观看 | 丰满的人妻一区二区10| 精品一区二区三区av| 青青操国产乱伦| 青娱乐AV| 欧美一区二区在线观看| 日韩精品第一页| 五月天无码| 性久久久久久久| 亚洲制服在线观看| 欧美成人视屏| 亚洲无码一二三| 狠狠av| a毛片| www.91AV| 99精品视频16在线免费观看| 国产91无码| 欧美日韩国产成人电影| 翔田千里无码AV在线观看| 五月婷婷导航| 在线色综合| 丁香久久婷婷| 欧美视频区| 久久先锋| 黄色AV免费观看| 波多野结衣无码一区| 一区四区视频| 91亚洲国产成人精品一区二区三| 成人黄色AV网站| 高清无码视频免费版本在线观看| 久久免费毛片| 色噜噜狠狠一区二区三区300部| 日日爱99| 91精品少妇高潮一区二区三区不卡| 亚洲最新AV在线| 亚洲影院第一页在线观看| 国产精品国内自产| 久草三级片| 未满十八18禁止免费无码网站 | 美女视频毛片| 三级片视频网址| 久久理论| 欧美日韩激情视频| 一区二区三区免费在线| 亚洲欧洲av| 日韩成人AV在线| 国产免费a片| 日韩欧美视频在线| 国产精品黄色视频| 中文字幕亚洲区| 狠狠干影院| 影音先锋成人av| 日本无码在线播放| 日本一区二区不卡| 国产精品揄拍一区二区| 国产亚洲AV| 青青草五月天色婷婷丁香| 极品美女扒开粉嫩小泬高潮一| 午夜无码在线观看视频| 北条麻妃一区二区三区在线| 天天爽天天爽夜夜爽| 亚洲欧美激情小说另类| www日韩欧美| 草草影院第一页YYCCC| 青青草狠狠干| 亚洲欧美成人在线视频| 欧美av| 99er在线视频| 国产91精品探花一区二区| www.久久久久| 亚洲视频天堂| 无码av网站| 大香蕉人妻| 99re国产| 国产人妻一区二区三区欧美毛片| 天天爽天天| 黄色片视频日本| 91嫩草久久久久久久| 好好的日视频| 天天日日干| 中文字幕av免费观看| 亚洲AV免费电影| 影音先锋AV在线资源| 免费大黄网站| 成年人观看视频| 精品福利在线| 亚洲无码人妻| 日本三级AAA三级AAAA97 | 国产成人网| 国产一区二区精品| 久久中文字幕综合| 中文无码字幕视频| 中国操B视频| 在线观看AV网站| 亚洲无码久久精品| 91在线成人| 黑人人妻黑人ThePorn| 伊人久久大香线蕉av一区| 五月天激情婷婷| 岛国av在线| 青青草做爱视频| 亚洲国产高清国产精品| 天天日天天干天天草| 99re6热在线精品视频| 国产精品国产三级国产AⅤ原创| 欧美黄色三级片| 麻豆91精品人妻成人无码| 精品操逼| 中文字幕高清免费看| 中国最大成人网站| 91av在线观看视频| 成人免费在线网站| 青草视频在线免费观看| 日韩一级免费毛片| 国产www| 98在线++传媒麻豆的视频| 亚洲国产av一区| 在线观看免费a片| 亚洲激情自拍| 国产伦精一品二品三品app| 丁香五月色情| 五月丁香色婷婷| 久久久3| 第四色色综合| 日本黄色片视频| 在线观看av网站| 中文字幕无码高清| 日韩日逼视频| 麻豆精品国产| 在线一区视频| 国产三级在线免费观看| 日韩无码免费播放| 亚洲va| 国产精品久久久久久久免牛肉蒲 | 丝瓜视频黄| 午夜激情乱伦| 国产黄色在线免费观看| 日韩福利视频| 天天爽夜夜爽AA片免费| 少妇搡BBBB搡BBB搡18禁| 亚洲精品视频免费在线观看| 少妇高潮无码| 欧美日本亚洲| 成人三级AV在线| 国产无限资源| 免费成人高清视频| 亚洲av男人天堂| 无码电影网站| 免费的黄色录像| 91逼| 求欧美精品网址| 国产成人AV在线播放| 国产欧美日韩在线| 色婷婷91| 日本黄色A片免费看| 欧美夜夜骑| 一级片| 中出欧美亚洲| jzzijzzij亚洲成熟少妇在线观看 九色蝌蚪9l视频蝌蚪9l视频成人熟妇 | 人人上人人操| 日韩AV一区二区三区四区| 亚洲精品成人在线| 欧美成人一区二区| 草碰在线视频| 亚洲第一中文字幕| 日韩久久视频| 影音先锋aV成人无码电影| 国产A片录制现场妹子都很多| 国产精品一卡二卡三卡| 日本成人A片| 一级欧美| 无码一区精品久久久成人| 999成人网| 老汉AV| 在线a视频| 靠比免费| 欧美深夜福利视频| 91视频在线免费看| 久久精品视频在线观看| 天天爽天天| 亚洲AV成人一区二区三区不卡 | 日韩18禁| 日韩操比视频| 国产一区二区免费| 日本女人操逼视频| 337P大胆粉嫩噜噜噜| 后入av| 国产一区二区成人久久919色| 国产精品揄拍一区二区| 很很撸在线视频| 精品无码人妻一区二区媚黑| 无码中文字幕网站| 国产精品乱草| 亚洲色图1| 一道本无码在线| 99在线视频观看| 欧美一级片网站| 超碰2022| 三级片欧美| 精品蜜桃秘一区二区三区观看| 国产乱伦一区| 中文在线观看视频| 久久久久久久毛片| BBw日本熟妇BBwHD| 国产精品秘麻豆免费版现看视频| 免费无码视频一区二区| 啪啪视频在线观看| 怡红院一区| 欧美成人精品无码网站| 少妇人妻一区二区三区| 激情无码国产| 大香蕉黄色电影| 男女一区二区三区| 在线免费观看无码| 免费黄色在线观看| 美女高潮网站| 操久| 国产欧美一区二区三区视频| 欧洲综合视频| 成人操B| 逼逼AV网站-日韩电影| 一区黄片| 精品一区二区三区免费毛片 | 特级西西WWW无码| 亚洲精品久久久久久久久豆丁网| 免费爱爱视频| 免费看黄色片视频| 青青草超碰在线| 男人av网站| 日韩一级免费在线观看| 欧美成人大香蕉| 一级a片在线免费观看| 综合操逼网| 日韩A片在线观看| 久久久无码电影| 日韩亚洲欧美在线| 国产xxxxx| 亚洲天堂视频网站| 亚洲精品无码电影| AV无码国产| 日本一级婬片免费放| 免费一级a片| 艹逼中文字幕| 天天操夜夜操人人操| 在线观看免费黄片| 天堂va欧美ⅴa亚洲va一夜| 亚洲AV永久无码精品| 五月婷婷色欲| 亚洲无码在线播放视频| 国产成人在线播放| 亚洲一二三四区| 91视频久久久| 免费看a的网站| 老汉AV| 亚洲精品区| 日韩人妻系列| 亚洲AV无码电影| www.wuma| 日皮视频在线看| 国产美女自拍| 日韩欧美黄色电影| 国产美女自慰网站| 霸道总裁雷总各种姿势白浆爱情岛论坛 | 欧美精品99久久久| 四虎成人精品永久免费AV九九| 无码成人av| 亚洲欧美日韩性爱| 草B网| 一级黄色A片| 91久久久青青青青草| 在线观看日本vs欧洲vs美洲| 九九热日本| 亚洲久久久久久| 艹b视频在线观看| 亚洲精品一二三| 夜夜骚AV一二三区无码| 久久婷综合| 欧美操逼图片| 999福利视频| 黄a网站| 精品国产AV鲁一鲁一区| 日韩中文字幕在线观看视频| 18SAV| 国产色情视频在线观看| 日皮做爱视频网站| 3d动漫精品一区二区三区在线观看 | 欧美性爱动态| 国产又大又粗| 国产综合亚洲精品一区二| 性爱av天堂| 性爱免费专区| 亚洲1区| 操逼日爱| 国产精品久久久久久无码人妻| 97超碰人人| 精品成人影视| 久久国产精品波多野结衣AV| 免费无码婬片AAAA片在线蜜芽 | 青青草无码成人天堂免费| 蜜臀无码在线| 不卡中文字幕| 成人黃色A片免费看| 午夜无码人妻AV| 欧美日韩免费观看视频| 国产精品一线| 韩日综合在线| 在线看色| 日韩不卡av| 亚洲V视频| 日韩A片免费观看| 偷拍综合网| 亚洲视频在线观看网站| 亚洲无码AV电影| 欧美性综合网| 欧美青青草| 免费涩涩无遮挡18国产| 久久系列| 国产精品扒开腿做爽爽爽视频| 97资源在线| 久久天天拍| 操逼在线观看| 少妇搡BBBB搡BBB搡AA| 大香蕉99| 精品人妻一区二区三区在线视频不卡 | 在线观看免费成人网站| 欧洲成人无码| 国产操操操| 青娱乐国产精品一区二区| 性久久久久久久| 一本色道无码人妻精品| 91口爆| 久久久久久免费| 精品人妻少妇| 69av在线观看视频| 巨乳无码噜噜噜久久久| 亚洲图片小说区| 日本色情视频网站| 国产AV不卡| 久久国产精彩视频| 国产第一页在线| 欧美女人日逼视频| 99成人| 青青草社区| 一本色道精品久久一区二区三区 | 成全在线观看高清的| 成人精品永久免费视频99久久精品| 中文在线a√在线8| 青青操青青干| 四川w搡BBB搡wBBB搡| 欧美操逼在线观看| 亚洲综合区| 超碰2022| 亚洲国产成人无码| 亚洲国产精品久久| 久热人妻| 欧美自拍视频| 国产a片免费看| 色AV网| 一本道在线无码| 真人一级片| 亚洲AV无码国产精品| 亚洲AV成人无码AV小说| 欧美不卡在线视频| 亚洲图片一区| 嫩草在线播放| 免费A片视频| 黄片无遮挡| 小黄片高清无码| 色呦呦中文字幕| av乱伦小说| 韩国高清无码| 人人摸人人插| 大香蕉玖玖| 午夜日逼| 激情伊人五月天| 久热最新| 夜夜狠狠躁日日躁| 欧美性生交18XXXXX无码| 亚洲中文在线观看| 91精品国产综合久久久蜜臀主演| 69激情网| 色中文字幕| 国产视频在线播放| 日韩av中文字幕在线播放| 欧美精品一二三区| 国产亚洲欧美视频| 亚洲成人一区二区在线观看| 亚洲欧洲日韩| 欧美精品黄| 亚洲中文在线观看| 日韩成人一区二区| 欧美一级片免费观看| a片免费在线观看| 欧美嗯啊| 亚洲经典一| 青青操在线观看| 欧美午夜精品久久久久久3D| 白丝在线观看| 91香蕉视频在线播放| ww免费视频| 俺也去电影| 日本无码电影| 九九天堂| 日韩AV一区二区在线观看| 亚洲天堂无码视频| 人人看人人摸人人草| 五十路義母| 欧美A√| 亚洲无码视频看看| 日韩无码高清网站| 爱草视频| 国产黄网站| 日韩欧美日韩| 亚洲中文在线播放| 中文字幕欧美视频| 国产尤物在线观看| 久操影视| 午夜成人网站| 超碰青青青| 乌克兰xxxx| 蜜桃AV在线| 久久偷看各类wc女厕嘘嘘偷窃| 黄色成人视频网站在线观看| 青草视频在线播放| 日韩在线视频免费播放| 人人看人人摸人人插| 99国产在线视频| 麻豆国产91在线播放| 亚洲黄色在线播放| 亚洲成人精品| 亚洲av电影网| 怡春院视频| 免费一级欧美片在线观看| 色一区二区三区| 午夜无码高清| 亚洲天堂国产视频| 在线观看AV91| 国产美女自拍视频| 美女福利视频| 闺蜜AV| 国产成人精品视频| 大伊人久久| 最近日本中文字幕中文翻译歌词| 成人国产| 97资源在线| 亚洲无码高清视频在线| 青青草狠狠干| 五月天久久久久久| 中文字幕在线免费视频| 国产毛片在线视频| 天堂网一区二区三区| 国产91探花系列在线观看| 国产免费成人视频| 大荫蒂视频另类XX| 91人妻人人澡人人爽人人DVD| 中国老太卖婬HD播放| 麻豆mdapp03.tⅴ| 99精品免费在线观看| 无码在线播放观看| 亚洲欧美在线观看| 东京热视频一区| 无码欧洲| 人妻少妇综合| 超碰在线人人干| 三级片在线看| 中文字幕av久久爽Av| 日本婷婷| 国产特黄级AAAAA片免| 中文有码| 婷婷丁香五月激情| 欧美丁香五月| 国产亚洲精品久久久波多野结衣 | 你操综合| 亚洲AV成人片色在线观看高潮| 久久亚洲Aⅴ成人无码国产丝袜 | 91成人在线观看学生和老师| 国产色视频在线| 国产精品久久久久久久久久久久久久久| 亚洲免费av在线| 骚白虎一区| 亚洲AV成人片无码网站网蜜柚| 毛片黄色| 国产一级AV免费观看| 精品日韩在线视频| 一本色道久久综合亚洲精东小说| 亚州激情| 国产迷奸视频| 亚洲在线成人| 乱伦乱伦乱伦中文字幕| 国产黄色不卡| 亚洲无码影音先锋| 亚洲成人AV在线播放| 亚洲超碰在线观看| 亚洲av资源在线观看| 国产做受精品网站在线观看| 麻豆国产91在线播放| 99九九久久| 丁香五月婷婷久久| 一级a一级a免费观看免免黄‘/| 小黃片秘嗯嗯啊| 天天做天天干| www亚洲无码A片贴吧| 老女人日逼视频| 久久伊人综合| 91亚洲精华国产精华精华液| 成人国产片女人爽到高潮| 天天日日天天| 人人操免费| 国产精品粉嫩福利在线| 久久成人福利| 亚洲色a| 天天爽天天| 黄色国产视频| 俺去夜| 九九精品久久| 一区二区无码高清| 美日韩无码视频| 黑种人配中国少妇HD| 天天天天天天天天干| 精品一二三区| 亚洲高清在线观看视频| 特级西西444WWW视频| 91无码人妻精品一区二区蜜桃| 国产精品在线看| www.黄色在线| 一级做a爰片毛片A片| 久久国产精品波多野结衣AV| 欧美丰满少妇人妻精品| 内射视频免费观看| 国产一级a毛一级a毛视频在线网站)| 欧美偷拍一区| 免看一级a一片| 麻豆videos| 日韩中文字幕无码| 足浴小少妇-88AX| 久久久无码精品亚洲| 十八禁无码网站在线观看| 91超碰免费在线| 操BBB操BBB| 色婷婷香蕉在线一区二区| 亚洲日韩免费在线观看| 中文字幕观看| 亚洲一二三| 日本AV在线播放| 超碰人人人人人| 色五月在线观看| 人妻无码一区二区三区| 熟女资源网| 黄色毛片在线播放| 亚洲精品乱码久久久久久蜜桃欧美| 亚洲韩国中文字幕| 久草成人| 五月综合激情| 亚洲免费一区二区| 91精品免费视频| 日本一区二区三区在线播放| 欧美亚洲日韩一区二区| 久久嫩草| 婷婷亚洲国产| www.操B| 少妇搡BBBB搡BBB搡毛片 | 无码一页| 99re88| 五月色婷婷综合| 99久久婷婷国产综合精品青牛牛| 麻豆天美传媒AV果冻传媒| 91视频亚洲| 国产高清不卡| 四虎成人网站| 中文字幕一区二区6页| 日产无码| 国内自拍无码| 豆花天天吃最新视频| 精品人妻一区二区三区阅读全文| 亚洲毛片网站| 免费三级怡红院| 六十路老熟女码视频| AV大全在线免费观看| 广西少妇BBwBBwBBw| 毛片天堂| 人妻无码一区二区三区免费| 国产乱伦不卡| 青娱乐极品久久| 国产精品久久久久久久久| 黄色视频网站免费| 东北毛片| 中文字幕在线观看免费高清完整版在线观看 | www久久| 亚洲有码中文字幕| 黄色在线免费看| 亚洲在线免费视频| 亚洲无码不卡| 国产福利网站| 婷婷五月丁香网| 狠狠撸在线视频| 国产精品A片守望| 欧美老熟妇乱大交XXXXX| 夜夜嗨AV一区二区三区| 亚洲成人精品视频| 久久4| 四季AV一区二区夜夜嗨| 色色视频在线观看| 午夜福利三级| 97精品视频在线观看| 丁香五月六月婷婷| 国产一区二区三区在线观看免费视频免费视频免费视频 | 日韩小电影免费观看高清完整版在线观| 熟女嗷嗷叫高潮合集91| 大香蕉欧美视频| 亚洲欧美高清| 国产AV无码成人精品区| 免费肏逼视频| 黄网免费观看| 丁香五月五月婷婷| 老熟妇一区二区三区啪啪| h国产在线| 亚洲精品资源在线| 久久不射| 欧美亚洲中文字幕| 成人做爰100部免费网站| 国产欧美成人| 亚洲日韩中字| 99涩涩| 国产三级91| 在线视频一区二区三区| 久操视频免费观看| 狠狠操在线视频| 黄色大片在线免费观看| 丁香六月激情| a片免费在线观看| 国产中文| 麻豆免费福利视频| 国产欧美在线不卡| 黄色亚洲无码| 麻豆国产成人AV一区二区三区| 成人午夜A片免费看| 伊人网在线免费视频| 1024手机在线视频| 久久久久久久极品内射| 亚洲综合一区二区三区| 91国内产香蕉| 欧美亚洲成人在线观看| 国产迷奸在线| 亚洲精选一区二区三区| 国产av三级片| 亚洲黄色视频在线| 国产精品久久毛片A片| 91人人妻人人澡人人爽| 午夜AV无码| 四虎无码| 黄色福利网站| 苍井空亚洲精品AA片在线播放| 91夫妻交友视频| 五月天亭亭.com| 人人插人人澡| 久操电影网| 加勒比国产在线| 国产激情一区二区三区| 欧洲一区在线观看| 黑人巨大精品欧美| 99久久婷婷国产精品2020| 婷婷色在线播放| 日本高清一区| 日本色色网| 综合伊人| 肏少妇女情人大骚逼直播一区二区 | 久久久久成人片免费观看蜜芽| 国产精品色哟哟| 东京热免费视频| 欧美日韩男女淫乱一区二区| 麻豆视频在线免费观看| 久久久久亚洲AV成人片乱码| 亚洲中文字幕成人| eeuss在线| 午夜福利视频网站| 久久只有精品| 成人视频在线观看黄色18| 国产乱国产乱300精品| 伊人久久婷婷| 91在线精品视频| 黑人vs亚洲人在线播放| 吴梦梦一区二区在线观看| 亚洲精品日韩综合观看成人91| 久热人妻| 熟妇高潮| 成人无遮挡| 亚洲69视频| 操逼动漫| 亚洲小视频| 国产三级片网| 三级理论网站| 苍井空无码在线观看| 色色色色五月| 国产一级操逼视频| 国产区av| 高清无码视频网站| 操比一区| 西西444WWW无码大胆在线观看| 亚洲AV无码乱码A片无码沈樵| AAA日韩| 亚洲图片中文字幕| 手机看片日韩| 91精品人妻一区二区三区蜜桃欧美 | av女人天堂| 日本AI高清无码在线观看网址 | 豆花成人视频| 欧美黄色片| 菊花综合网| 一级无码在线| 中文字幕国产在线观看| 大学生一级特黄大片| 在线18禁| 国产午夜精品电影| 免费无码高清视频| 国产一级黄片| 欧美不卡| 91ccc| 国产人妖网站| 成人AV三级片| 一级片在线视频| 免费毛片网址| 殴美老妇BBBBBBBBB| 激情亚洲| 俺来了俺去也| 操逼视频看看| 欧美女人日逼视频| 毛片黄色视频| 国产午夜成人| 五月天黄色小说| 大香蕉视频在线观看| 撸撸操在线视频观看只有精品| 免费看黄色电影| 超碰1999| 韩国三级HD中文字幕的背景音乐 | 国产精品久久久精品| 大鸡吧在线| 久久99精品国产.久久久久| 欧美日韩国产在线| 九色91PORNY国产| 亚洲第一视频在线观看| 国产v亚洲| 精品无码人妻一区二区媚黑| 亚洲中文字幕免费视频| 麻豆精品久久久久久久99蜜桃| 欧美日日| 久久久精品999| 国产成人亚洲精品| 欧美搡BBBB搡BBB| V天堂在线| 麻豆精品视频| 中文字幕自拍偷拍| 影音先锋AV资源在线| 欧美性高潮| 国产午夜在线观看| 在线免费看黄色| a三级片| 色先锋资源站| 麻豆黄色片| 日韩在线综合| 国产av一区二区三区| 五月丁香视频在线| 一区二区三区水蜜桃| 国产精品美女视频| 狠狠干狠狠撸| 又a又黄高清无码视频| 亚洲日韩成人AV| 亚洲精品18禁| 丁香五月欧美激情| 碰碰视频| 中文字幕免| 日韩激情一区二区| 91丨九色丨熟女新版| 国产一卡二卡三卡| 亚洲无码在线播放| 91香蕉网站| 精品国产天线2024| 在线播放JUY-925被丈夫上司侵犯的第7天| 中国操逼网| AV一二区| 国产xxxx视频| 91丨熟女丨对白| 国产午夜无码福利视频| 成人在线91| 日本三区视频| 成人在线免费电影| 免费无码一区二区三区| 极品美女扒开粉嫩小泬高潮一| 国产suv精品一区二区6精华液| 久久国产精品免费视频| 中文在线永久免费观看| 日韩无码免费| 91麻豆成人精品国产| 欧美亚洲成人电影| 超碰在线看| 亚洲免费在线视频| 伊人网导航| 色婷婷国产精品综合在线观看| 亚洲激情综合网| 无码中文暮| 人人操人人爱人人妻| 粉嫩护士小泬18p| 黄色小视频免费看| 瘦精品无码一区二区三区四区五区六区七区八区 | 精品久久成人| 黄色片网站| 欧美日本一区二区三区| 国产精品久久久久无码AV| 亚洲性天堂| 国产高清免费视频| 国产免费操逼| 日韩欧美一区在线| 99热这里有精品| 亚洲天堂无码在线| 国产99999| 日本理论片一道本| 一区二区三区在线免费观看| 久久国产黄色一级片| 老女人肏屄视频| 高h网站| 爱操视频| 在线天堂v| 国产足交视频| 成人无码动漫A片| 青草伊人网| 人人人爽| 欧美成人视屏| 影音先锋一区二区| 色婷婷欧美在线播放内射| 久久99久久99久久99人受| 亚洲无码第一页| A视频免费在线观看| 亚洲电影在线| 第一色影院| 日韩91在线视频| 精品成人在线视频| 欧美色图另类图片| 老熟女一区二区三区| 91蜜桃婷婷狠狠久久综合9色| 91官网在线观看| 午夜啊啊啊| 精品人妻无码| 亚洲视频第一页| 一本色道久久综合熟妇人妻| yjizz视频| 欧洲一区二区| 久久久精品国产视频| 国产成人无码精品| 丁香五月天视频| 蜜芽av在线观看| 久草资源在线观看| 日日干天天操| 成人亚洲精品一区二区三区| 欧美在线无码| 成人免费毛片AAAAAA片| 91国产人妻| 欧美性爱一级| 亚洲在线中文字幕| 狠狠色狠狠撸| 日韩中文字幕在线观看视频| 精品九九九| 亚洲欧美在线视频观看| 自拍偷拍一区| 久久视频一二| 台湾久久| 黄色午夜| 色婷婷一区| 色色色色网| 亚洲免费观看高清完整版在线观| 婷婷五月在线视频| 先锋成人影音| 安微妇搡BBBB搡BBBB| 91视频专区| 日韩毛片在线| 亚洲丰满熟妇| 91免费国产视频| 欧美黑人操逼视频| 亚州视频在线| 亚洲天堂在线免费观看| 日本亚洲精品秘入口A片| 69成人免费视频| 亚洲第一区欧美日韩| 成人精品一区日本无码网站suv | WWW.豆花视频精品| 亚洲精品美女| 国产综合第一页| 成人国产精品秘在线看|