我是靠谱客的博主 迷人指甲油,最近开发中收集的这篇文章主要介绍springboot实现动态定时任务(客户端维持心跳),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

准备:

1.启动类里面使用@EnableScheduling 注解开启功能

在这里插入图片描述

2.定时任务工具类

@Async
public class ScheduleUtil {

    private static ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler();
    private static Map<String, ScheduledFuture<?>> scheduledFutureMap = new HashMap<>();

    static {
        threadPoolTaskScheduler.initialize();
        System.out.println("定时任务线程池启动");
    }

    /**
     * 启动
     *
     * @param scheduleTask 定时任务
     * @param corn         执行时间表达式
     */
    public static boolean start(ScheduleTask scheduleTask, String corn) {
        System.out.println("启动定时任务线程 taskId " + scheduleTask.getId());
        ScheduledFuture<?> scheduledFuture = threadPoolTaskScheduler
                .schedule(scheduleTask, new CronTrigger(corn));
        scheduledFutureMap.put(scheduleTask.getId(), scheduledFuture);
        return true;
    }

    /**
     * 取消
     *
     * @param scheduleTask 定时任务
     */
    public static boolean cancel(ScheduleTask scheduleTask) {
        System.out.println("关闭定时任务线程 taskId " + scheduleTask.getId());
        ScheduledFuture<?> scheduledFuture = scheduledFutureMap.get(scheduleTask.getId());
        if (scheduledFuture != null && !scheduledFuture.isCancelled()) {
            scheduledFuture.cancel(false);
        }
        scheduledFutureMap.remove(scheduleTask.getId());
        return true;
    }

    /**
     * 取消通过guid
     *
     */
    public static boolean byGuidCancel(String guid){
        System.out.println("关闭定时任务线程 taskId " + guid);
        ScheduledFuture<?> scheduledFuture = scheduledFutureMap.get(guid);
        if (scheduledFuture != null && !scheduledFuture.isCancelled()) {
            scheduledFuture.cancel(false);
        }
        return true;
    }


    /**
     * 修改
     *
     * @param scheduleTask 定时任务
     * @param corn         执行时间表达式
     */
    public static boolean reset(ScheduleTask scheduleTask, String corn) {
        //先取消定时任务
        cancel(scheduleTask);
        //然后启动新的定时任务
        start(scheduleTask, corn);
        return true;
    }
}

3.定时任务实体类:

@Data
@AllArgsConstructor
@NoArgsConstructor
public class ScheduleTask implements Runnable {
    

    private String id;
    private String guid;
    private TaskService service;


    @Override
    public void run() {
        service.work(id); //这里也可以增加参数
    }
}

4:根据业务逻辑创建实际定时任务服务:

public interface TaskService {

    /**
     * 发送心跳包
     * @param guid
     */
    void work(String guid);//这里也可以增加参数,与上方对应
}
public class TaskServiceImpl implements TaskService {
@Resource
private RestTemplate restTemplate;


    @Override
    public void work(String guid) {
   //书写字节的业务逻辑
    }
}

调用:

ScheduleUtil.start(new ScheduleTask(WxTokenUtil.guid, taskService, WxTokenUtil.guid), "0 */1 * * * ?");

在这里插入图片描述

在这里插入图片描述

最后

以上就是迷人指甲油为你收集整理的springboot实现动态定时任务(客户端维持心跳)的全部内容,希望文章能够帮你解决springboot实现动态定时任务(客户端维持心跳)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(47)

评论列表共有 0 条评论

立即
投稿
返回
顶部