@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";
}