Spring项目中,执行用户设定的定时任务(用户给某人定时发送邮件)

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,不知道是为什么。

是我的思路有问题吗。

阅读 4.4k
1 个回答

加上try catch看看是否有异常跑出。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题