Springboot中实现手动启动和暂停任务的功能

简介: Springboot中实现手动启动和暂停任务的功能
importorg.springframework.beans.factory.annotation.Autowired;
importorg.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
importorg.springframework.scheduling.support.CronTrigger;
importorg.springframework.stereotype.Service;
importjava.util.concurrent.ScheduledFuture;
@ServicepublicclassManualScheduledTaskService {
privateThreadPoolTaskSchedulerscheduler;
privateRunnabletask;
privateScheduledFuture<?>taskFuture;
@AutowiredpublicManualScheduledTaskService(ThreadPoolTaskSchedulerscheduler) {
this.scheduler=scheduler;
this.task= () ->System.out.println("定时任务执行:"+System.currentTimeMillis());
    }
publicvoidstartTask(StringcronExpression) {
if (taskFuture==null||taskFuture.isCancelled()) {
taskFuture=scheduler.schedule(task, newCronTrigger(cronExpression));
        }
    }
publicvoidstopTask() {
if (taskFuture!=null) {
taskFuture.cancel(true);
        }
    }
publicbooleanisTaskRunning() {
returntaskFuture!=null&&!taskFuture.isCancelled();
    }
}
importorg.springframework.beans.factory.annotation.Autowired;
importorg.springframework.web.bind.annotation.GetMapping;
importorg.springframework.web.bind.annotation.PostMapping;
importorg.springframework.web.bind.annotation.RequestParam;
importorg.springframework.web.bind.annotation.RestController;
@RestControllerpublicclassManualScheduledTaskController {
privateManualScheduledTaskServicescheduledTaskService;
@AutowiredpublicManualScheduledTaskController(ManualScheduledTaskServicescheduledTaskService) {
this.scheduledTaskService=scheduledTaskService;
    }
@PostMapping("/startTask")
publicStringstartTask(@RequestParam("cronExpression") StringcronExpression) {
scheduledTaskService.startTask(cronExpression);
return"定时任务已开始,cron表达式:"+cronExpression;
    }
@GetMapping("/stopTask")
publicStringstopTask() {
scheduledTaskService.stopTask();
return"定时任务已停止";
    }
@GetMapping("/isTaskRunning")
publicbooleanisTaskRunning() {
returnscheduledTaskService.isTaskRunning();
    }
}

POSTMAN中调用http://localhost:port/**/startTask接口,比如POST cronExpression=*/5 * * * * *,可以在控制台看到输出,每隔5秒输出任务描述,调用http://localhost:port/**/stopTask,可以看到控制台输出停止。这就是web上手动启动和暂停任务的原理,结合业务需求,维护一下任务的id和状态到数据库里,就可以实现自己定制化的任务管理功能了。CronTrigger可以换成PeriodicTrigger也实现固定周期的定时任务。

目录
相关文章
|
8月前
|
XML Java 应用服务中间件
【SpringBoot(一)】Spring的认知、容器功能讲解与自动装配原理的入门,带你熟悉Springboot中基本的注解使用
SpringBoot专栏开篇第一章,讲述认识SpringBoot、Bean容器功能的讲解、自动装配原理的入门,还有其他常用的Springboot注解!如果想要了解SpringBoot,那么就进来看看吧!
759 2
|
XML 前端开发 Java
SpringBoot实现文件上传下载功能
本文介绍了如何使用SpringBoot实现文件上传与下载功能,涵盖配置和代码实现。包括Maven依赖配置(如`spring-boot-starter-web`和`spring-boot-starter-thymeleaf`)、前端HTML页面设计、WebConfig路径映射配置、YAML文件路径设置,以及核心的文件上传(通过`MultipartFile`处理)和下载(利用`ResponseEntity`返回文件流)功能的Java代码实现。文章由Colorful_WP撰写,内容详实,适合开发者学习参考。
1191 0
|
11月前
|
缓存 前端开发 Java
SpringBoot 实现动态菜单功能完整指南
本文介绍了一个动态菜单系统的实现方案,涵盖数据库设计、SpringBoot后端实现、Vue前端展示及权限控制等内容,适用于中后台系统的权限管理。
1167 1
|
11月前
|
Java 关系型数据库 MySQL
springboot项目集成dolphinscheduler调度器 实现datax数据同步任务
springboot项目集成dolphinscheduler调度器 实现datax数据同步任务
1046 2
|
Java 开发者 微服务
手写模拟Spring Boot自动配置功能
【11月更文挑战第19天】随着微服务架构的兴起,Spring Boot作为一种快速开发框架,因其简化了Spring应用的初始搭建和开发过程,受到了广大开发者的青睐。自动配置作为Spring Boot的核心特性之一,大大减少了手动配置的工作量,提高了开发效率。
332 0
|
Java Spring
如何优雅的实现 SpringBoot 并行任务
我是小假 期待与你的下一次相遇 ~
259 1
|
11月前
|
人工智能 安全 Java
Spring Boot 中使用 Function 和异步线程池处理列表拆分任务并汇总结果
在Java开发中,处理大规模数据时常常需要将列表拆分为多个子列表进行异步处理并汇总结果。本文介绍如何在Spring Boot中使用Function和异步线程池实现高效且可维护的代码,涵盖结果封装、线程池配置、列表拆分处理及结果汇总等关键步骤。
422 0
|
分布式计算 大数据 Java
springboot项目集成大数据第三方dolphinscheduler调度器 执行/停止任务
springboot项目集成大数据第三方dolphinscheduler调度器 执行/停止任务
318 0