springboot 实现动态配置定时任务时间

@RestController
public class controller {

    @Autowired
    SchedualService schedualService;
    //需要按时执行的任务,如果有多种任务,可以创建多种任务类
   class Task1 implements Runnable {
        @Override
        public void run(){
            //System.out.println("" + new Date() + " hello");
            schedualService.test();
        }
    }

    @Autowired
    private ThreadPoolTaskScheduler threadPoolTaskScheduler;

    @Bean
    public ThreadPoolTaskScheduler threadPoolTaskScheduler(){
        return new ThreadPoolTaskScheduler();
    }

    private ScheduledFuture<?> future;

    @PostConstruct
    private void postConstruct(){
        startCron();
    }
//项目启动的时候就启动定时任务,初始的corn可以去数据库里读取
    private void startCron(){

        future = threadPoolTaskScheduler.schedule(new Task1(), new CronTrigger("*/5 * * * * *"));

    }


    private void stopCron(){

        if(future != null) {
            future.cancel(true);
        }

    }

    @RequestMapping("/changeCorn")
    @ResponseBody
    public String startCron10(@RequestParam("corn")String corn){
        System.out.println("change");
        stopCron();
        //"*/12 * * * * *"
        future = threadPoolTaskScheduler.schedule(new Task1(), new CronTrigger(corn));
        System.out.println("change success");
        return "change success";
    }

}

 

多一个任务

@RestController
@RequestMapping("/schedule")
public class ScheduleController {//a控制定时任务

	
	@Autowired
	MailConfigMapper mailConfigMapper;
	@Autowired
	BillingService billingService;
	
    //a需要按时执行的任务,如果有多种任务,可以创建多种任务类
	//a检测服务down掉发Email的定时任务
   private class TaskServiceEmail implements Runnable {
        @Override
        public void run(){
            //System.out.println("" + new Date() + " Service hello");
            billingService.warningLostService();
        }
    }
   //a检测bue变化发Email的定时任务
   private class TaskBueEmail implements Runnable {
       @Override
       public void run(){
           //System.out.println("" + new Date() + " Bue hello");
           billingService.warningBueChange();
       }
   }
 
    @Autowired
    private ThreadPoolTaskScheduler threadPoolTaskScheduler;
 
    @Bean
    public ThreadPoolTaskScheduler threadPoolTaskScheduler(){
        return new ThreadPoolTaskScheduler();
    }
 
    //a用于记录发送检测服务down掉的定时任务线程
    private ScheduledFuture<?> serviceEmailFuture;
    //a用于记录发送检测bue变化的定时任务线程
    private ScheduledFuture<?> bueEmailFuture;
 
    @PostConstruct
    private void postConstruct(){
        startCron();
    }

    
    /**
     * 项目启动时,从数据库中取出corn表达式,启动默认定时任务
     */
    private void startCron(){//"*/5 * * * * *"  0 57 10 * * ?  
    	//id为1的对应的service down检测发邮件的配置数据
    	MailConfig serviceEmailConfig = mailConfigMapper.getMailConfigById(1);
    	serviceEmailFuture = threadPoolTaskScheduler.schedule(new TaskServiceEmail(), new CronTrigger(serviceEmailConfig.getCorn()));
    	//id为2的对应的bue change 检测发邮件的配置数据
    	MailConfig bueEmailConfig = mailConfigMapper.getMailConfigById(2);
    	bueEmailFuture = threadPoolTaskScheduler.schedule(new TaskBueEmail(), new CronTrigger(bueEmailConfig.getCorn()));
    }
 
 
    /**
     * 停止之前的定时任务
     */
    private void stopCron(String which){
    	if(which.equals("serviceEmail")) {
    		if(serviceEmailFuture != null) {
            	serviceEmailFuture.cancel(true);
            }
    	}else if(which.equals("bueEmail")) {
    		if(bueEmailFuture != null) {
            	bueEmailFuture.cancel(true);
            }
    	}
        
    }
 
    /**a更改定时任务的定时,先停止之前的定时任务,
     * 将新的定时写入数据库,启动新的定时任务
     * @param corn 定时corn表达式
     * @return
     */
    @RequestMapping("/changeCorn")
    @ResponseBody
    public String changeCorn(@RequestParam("corn")String corn,@RequestParam("which")String which){
    	
        System.out.println("change");
        stopCron(which);
        if(which.equals("serviceEmail")) {
        	mailConfigMapper.updateMailConfigCorn(corn,1);
        	serviceEmailFuture = threadPoolTaskScheduler.schedule(new TaskServiceEmail(), new CronTrigger(corn));
    	}else if(which.equals("bueEmail")) {
    		mailConfigMapper.updateMailConfigCorn(corn,2);
    		bueEmailFuture = threadPoolTaskScheduler.schedule(new TaskBueEmail(), new CronTrigger(corn));
    	}
        System.out.println("change success");
        return "change success";
    }

 

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值