概述
准备:
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实现动态定时任务(客户端维持心跳)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复