异步的延迟调度任务,如我要调度一个任务,但我调度这个任务需要延迟一定时间才会执行。下面请看表演
配置ThreadPoolTaskScheduler
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
@Configuration
public class TaskSchedulerConfig {
@Bean
public ThreadPoolTaskScheduler taskScheduler() {
ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler();
threadPoolTaskScheduler.setPoolSize(20);
threadPoolTaskScheduler.setWaitForTasksToCompleteOnShutdown(true);//任务完成再关闭线程池
threadPoolTaskScheduler.setAwaitTerminationSeconds(60);//设置任务等待时间,如果超过该值还没有销毁就强制销毁,确保最后关闭
return threadPoolTaskScheduler;
}
}
任务对象
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import org.springframework.stereotype.Component;
import java.time.Duration;
import java.time.Instant;
import java.time.ZoneId;
import java.util.concurrent.ScheduledFuture;
@Component
@Slf4j
public class ThreadTaskService {
@Autowired
private ThreadPoolTaskScheduler threadPoolTaskScheduler;
private ScheduledFuture scheduledFuture;
//public void run(){
// scheduledFuture = threadPoolTaskScheduler.scheduleWithFixedDelay(new CustomTask(), Duration.ofSeconds(2));
//}
public void delayedTow(String data, String data2, long microseconds) {
threadPoolTaskScheduler.schedule(
() -> {
System.out.println(data+"====="+data2);
log.info("延迟了{}毫秒执行这个任务",microseconds);
},
Instant.now().atZone(ZoneId.of("Asia/Shanghai")).toInstant().plusMillis(microseconds));
}
}
调度任务
@RequestMapping("/test")
public Object test(){
threadTaskService.delayedTow("你好1","你好2",9000);
System.out.println("调度任务成功");
return null;
}
请求这个接口
首先你会看到
过了9秒后,你会看到
那么有一个业务需求: 在延迟的这个时间内,如果要取消这个任务该怎么办呢?
那你就要看我另外一篇