Controller中如下:
@RequestMapping("sendMailAtTime")
public TMessage sendMailAtTime(Mail mail, long setTime) {
Runnable runnable = () -> {
System.out.println("定时任务开始执行");
mailService.sendMail(mail);
System.out.println("定时任务执行完毕");
};
ScheduledUtil.addTask(runnable, setTime);
return new TMessage(TMessage.CODE_SUCCESS, "设置定时任务成功:" + setTime);
}
这是ScheduledUtil
public class ScheduledUtil {
private static ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(SysConfig.MAX_POLL_SIZE);
/**
* 添加一个定时任务
*
* @param runnable 具体的任务体
* @param execTime 指定执行时间
*/
public static void addTask(Runnable runnable, long execTime) {
scheduledThreadPool.schedule(runnable, getDelaySecond(execTime) + 1, TimeUnit.SECONDS);
}
/**
* 得到与当前时间相差秒数
*/
public static long getDelaySecond(long time) {
long res = (time - System.currentTimeMillis()) / 1000;
return res > 0 ? res : 0;
}
public static void main(String[] args) {
}
}
无论怎么调试,其实都不会执行定时器的真正任务(sendMail),只会打印第一句话"定时任务开始执行",下断点也捕捉不到sendMail,不知道是为什么。
是我的思路有问题吗。
加上try catch看看是否有异常跑出。