请选择 进入手机版 | 继续访问电脑版

在数据库配置定时任务并每次执行后更新

[复制链接]
云韵 发表于 2021-1-1 18:34:39 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
数据库设置定时任务并每次执行后更新



定时任务类实现SchedulingConfigurer,直接上代码

  1. package com.sanxin.cloud.app.api.task;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;import com.sanxin.cloud.common.StaticUtils;import com.sanxin.cloud.entity.GrabSinglePond;import com.sanxin.cloud.service.GrabSinglePondService;import com.sanxin.cloud.service.InfoParamService;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.annotation.Lazy;import org.springframework.scheduling.Trigger;import org.springframework.scheduling.TriggerContext;import org.springframework.scheduling.annotation.Scheduled;import org.springframework.scheduling.annotation.SchedulingConfigurer;import org.springframework.scheduling.config.CronTask;import org.springframework.scheduling.config.FixedRateTask;import org.springframework.scheduling.config.ScheduledTaskRegistrar;import org.springframework.scheduling.support.CronTrigger;import org.springframework.stereotype.Component;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.util.Date;import java.util.List;/** * @author zero * @version 1.0 * @date 2020-12-31 */@Lazy(value = false)@Componentpublic class OrderTask implements SchedulingConfigurer {        @Autowired        private GrabSinglePondService grabSinglePondService;        @Autowired        private InfoParamService infoParamService;        private Logger logger = LoggerFactory.getLogger(OrderTask.class);        /**         * 定时发送取消弹窗         *///    @Scheduled(fixedRate = 3000)        public void sendTimeCancelOrder() {                List singlePonds = grabSinglePondService.list(new QueryWrapper()                                .eq("status", StaticUtils.STATUS_YES));                System.out.println(singlePonds);                configureTasks(new ScheduledTaskRegistrar());                logger.info("定时器重置");//每次执行实现的方法重置        }        @Override        public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {                logger.info("定时任务启动");                //通过校验的数据执行定时任务                try {                        scheduledTaskRegistrar.addTriggerTask(getRunnable(), getTrigger());                } catch (Exception e) {                        logger.error("定时任务启动错误");                }                logger.info("定时任务启动完成");        }        private Trigger getTrigger() {                return new Trigger() {                        @Override                        public Date nextExecutionTime(TriggerContext triggerContext) {                                //将Cron 0/1 * * * * ? 输入取得下一次执行的时间                                String orderCancelWindow = infoParamService.getValueByCode("order_cancel_window");//数据库设置的定时策略                                CronTrigger trigger = new CronTrigger(orderCancelWindow);                                Date nextExec = trigger.nextExecutionTime(triggerContext);                                return nextExec;                        }                };        }        private Runnable getRunnable() {                return new Runnable() {                        @Override                        public void run() {                                try {                                        Method method = OrderTask.class.getMethod("sendTimeCancelOrder", null);//如果是当前类直接执行方法,其他类的方法可以通过class或者getBean实现                                        method.invoke(OrderTask.this);                                } catch (InvocationTargetException e) {                                        logger.error("定时任务启动错误,反射异常:");                                } catch (Exception e) {                                        logger.error(e.getMessage());                                }                        }                };        }}
复制代码
来源:https://blog.csdn.net/zero1254483105/article/details/112037868
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

发布主题

专注素材教程免费分享
全国免费热线电话

18768367769

周一至周日9:00-23:00

反馈建议

27428564@qq.com 在线QQ咨询

扫描二维码关注我们

Powered by Discuz! X3.4© 2001-2013 Comsenz Inc.( 蜀ICP备2021001884号-1 )