账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    Spring项目中,执行用户设定的定时任务(用户给某人定时发送邮件)
    31
    0

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

    是我的思路有问题吗。

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 一叶墨痕 普通会员 1楼
      502 Bad Gateway

      502 Bad Gateway


      nginx
    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部