配置类
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
@Configuration
public class TaskSchedulerConfig {
@Bean(destroyMethod = "shutdown")
public ThreadPoolTaskScheduler taskScheduler() {
ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
scheduler.setPoolSize(自定义池大小,可以通过配置指定大小);
scheduler.initialize();
return scheduler;
}
}
创建和删除定时任务的接口示例
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import org.springframework.scheduling.support.CronTrigger;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.time.LocalDateTime;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ScheduledFuture;
@Slf4j
@RestController
@RequestMapping("/task")
public class InnerCommonController {
@GetMapping("/c")
public ResponseEntity<?> create(@RequestParam("cron") String cron,
@RequestParam("taskId") String taskId) {
Runnable task = () -> {
System.out.println("Executing task: " + taskId + LocalDateTime.now());
// 执行任务的具体逻辑
};
CronTrigger trigger = new CronTrigger(cron);
ScheduledFuture<?> future = taskScheduler.schedule(task, trigger);
scheduledTasks.put(taskId, future);
return ResponseEntity.ok().build();
}
@GetMapping("/d")
public ResponseEntity<?> delete(@RequestParam("taskId") String taskId) {
ScheduledFuture<?> future = scheduledTasks.remove(taskId);
if (future != null) {
future.cancel(false); // 取消任务
return ResponseEntity.ok().build();
} else {
return ResponseEntity.notFound().build();
}
}
}
调用示例
新增,cron表达式encode了,3秒一次
http://127.0.0.1:8080/demo/task/c?cron=0/3%20*%20*%20*%20*%20?%20&taskId=2024
删除
http://127.0.0.1:8080/demo/task/task/d?taskId=2024
创建后日志打印结果
Executing task: 20242024-08-05T13:50:03.013
Executing task: 20242024-08-05T13:50:06.014
Executing task: 20242024-08-05T13:50:09.003
Executing task: 20242024-08-05T13:50:12.011
Executing task: 20242024-08-05T13:50:15.012
Executing task: 20242024-08-05T13:50:18.007