zoukankan      html  css  js  c++  java
  • springboot 动态的修改定时任务

    有些需求 需要动态修改定时任务执行的时间

    import com.cmbchina.ccd.itpm.dao.WeeklyReportSettingMapper;
    import com.cmbchina.ccd.itpm.entity.WeeklyReportSetting;
    import com.cmbchina.ccd.itpm.entity.WeeklyReportSettingExample;
    import com.cmbchina.ccd.itpm.utils.R;
    import com.cmbchina.ccd.itpm.utils.SessionUtil;
    import io.swagger.annotations.Api;
    import io.swagger.annotations.ApiOperation;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.context.annotation.Bean;
    import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
    import org.springframework.scheduling.support.CronTrigger;
    import org.springframework.stereotype.Component;
    import org.springframework.web.bind.annotation.PostMapping;
    import org.springframework.web.bind.annotation.RequestBody;
    import org.springframework.web.bind.annotation.RestController;
    
    import javax.servlet.http.HttpServletRequest;
    import java.util.Date;
    import java.util.List;
    import java.util.concurrent.ScheduledFuture;
    
    import static com.cmbchina.ccd.itpm.utils.ObjectUtils.isNotEmpty;
    
    /**
     * @ClassName QuartzController
     * @Description TODO
     * @Author blackCatFish
     * @Date 2019/5/5
     * @Version 1.0
     **/
    @RestController
    @Component
    @Api(tags = "周报发起设置")
    public class QuartzController {
        @Autowired
        private ThreadPoolTaskScheduler threadPoolTaskScheduler;
        @Autowired
        private WeeklyReportSettingMapper weeklyReportSettingMapper;
    
        private ScheduledFuture<?> future;
    
        @Bean
        public ThreadPoolTaskScheduler threadPoolTaskScheduler() {
            return new ThreadPoolTaskScheduler();
        }
    
        @ApiOperation(value = "定时任务设置")
        @PostMapping("/startCron")
        public R addTimer(@RequestBody WeeklyReportSetting weeklyReportSetting, HttpServletRequest request) {
    //要清空之前的定时记录
    
            if (future != null) {
                future.cancel(true);
            }
            //8 8 5 ? ? 2
            if (weeklyReportSetting.getReportType() == 1) {
                String corn="";
                switch (weeklyReportSetting.getSendWeek()){
                    case 1:
                        corn="06 00 " + weeklyReportSetting.getSendTie() + " * * SUN";
                        break;
                    case 2:
                        corn="06 00 " + weeklyReportSetting.getSendTie() + " * * MON";
                        break;
                    case 3:
                        corn="06 00 " + weeklyReportSetting.getSendTie() + " * * TUES";
                        break;
                    case 4:
                        corn="06 00 " + weeklyReportSetting.getSendTie() + " * * WED";
                        break;
                    case 5:
                        corn="06 00 " + weeklyReportSetting.getSendTie() + " * * THUR";
                        break;
                    case 6:
                        corn="06 00 " + weeklyReportSetting.getSendTie() + " * * FRI";
                        break;
                    case 7:
                        corn="06 00 " + weeklyReportSetting.getSendTie() + " * * SAT";
                        break;
                }
                future = threadPoolTaskScheduler.schedule(new MyRunnable(weeklyReportSetting), new CronTrigger(corn));
            } else if (weeklyReportSetting.getReportType() == 2) {
                String time = weeklyReportSetting.getTimes();
                String[] times = time.split("-");
                String cron = "06 " + times[4] + " " + times[3] + " " + times[2] + " " + times[1] + " *";
                future = threadPoolTaskScheduler.schedule(new MyRunnable(weeklyReportSetting), new CronTrigger(cron));
            }
            return R.ok();
        }
    
        private class MyRunnable implements Runnable {
            private WeeklyReportSetting weeklyReportSetting;
    
            public MyRunnable(WeeklyReportSetting weeklyReportSetting) {
                this.weeklyReportSetting = weeklyReportSetting;
            }
    
            @Override
            public void run() {
                WeeklyReportSettingExample example = new WeeklyReportSettingExample();
                List<WeeklyReportSetting> weeklyReportSettingList = weeklyReportSettingMapper.selectByExample(example);
                if (isNotEmpty(weeklyReportSettingList)) {
                    weeklyReportSetting.setSettingId(System.currentTimeMillis() + "");
                    Date date = new Date();
                    weeklyReportSetting.setSettingTime(date);
                    weeklyReportSettingMapper.deleteByPrimaryKey(weeklyReportSettingList.get(0).getSettingId());
                    
                    weeklyReportSettingMapper.insert(weeklyReportSetting);
                } else {
                    weeklyReportSetting.setSettingId(System.currentTimeMillis() + "");
                    Date date = new Date();
                    weeklyReportSetting.setSettingTime(date);
                weeklyReportSettingMapper.insert(weeklyReportSetting);
                }
    
            }
        }
    }

    这样参数由前端传入进来后端进行处理成corn表达式就可以进行动态的修改定时任务了 

  • 相关阅读:
    应用C#和SQLCLR编写SQL Server用户定义函数
    警告:隐式声明与内建函数'exit'不兼容解决方案
    GDB详解
    Linux GCC常用命令
    WebBrowser处理AJAX生成的网页内容!
    IOS开发之网络编程开源类 Reachability应用
    NSString和NSMutableString常用方法+NSArray常用代码 (转)
    hosts立即生效的方法
    spring.net xml 命名空间
    c#操作access,update语句不执行的解决办法
  • 原文地址:https://www.cnblogs.com/blackCatFish/p/11009122.html
Copyright © 2011-2022 走看看