創(chuàng)建config
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import org.springframework.stereotype.Component;
@Component
@Slf4j
public class RecordScheduleTask {
@Bean
public ThreadPoolTaskScheduler threadPoolTaskScheduler() {
log.info("----request threadPoolTaskScheduler, 創(chuàng)建定時任務(wù)調(diào)度線程池 !----");
ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler();
threadPoolTaskScheduler.setPoolSize(64); //線程池大小
threadPoolTaskScheduler.setThreadNamePrefix("taskSchedulerExecutor-");
threadPoolTaskScheduler.setWaitForTasksToCompleteOnShutdown(true);
threadPoolTaskScheduler.setAwaitTerminationSeconds(60);
return threadPoolTaskScheduler;
}
}
插入定時任務(wù)
...
@Resource
private ThreadPoolTaskScheduler threadPoolTaskScheduler;
private Map<Long, List<ScheduledFuture>> scheduledFutureMap = new ConcurrentHashMap<>();
public void createScheduleTask(ScheduleRecordExeModel exeModel) {
List<ScheduledFuture> futureList = new ArrayList<>();
exeModel.getCronList().forEach(cron -> {
ScheduledFuture scheduledFuture = threadPoolTaskScheduler.schedule(() -> {
executeRecordBySystem(exeModel.getRecordId());
},
(triggerContext) -> {
CronTrigger cronTrigger = new CronTrigger(cron);
return cronTrigger.nextExecutionTime(triggerContext);
});
futureList.add(scheduledFuture);
});
if (!CollectionUtils.isEmpty(futureList)) {
scheduledFutureMap.put(exeModel.getRecordId(), futureList); //存儲定時任務(wù)的map,不是必須的
}
}
服務(wù)啟動時自動創(chuàng)建定時任務(wù)
@PostConstruct //這個注解代表在服務(wù)啟動的時候執(zhí)行
private void initScheduleTask(){
List<xxx> scheduleRecords = xxx;
scheduleRecords.forEach(record ->{
ScheduleRecordExeModel exeModel = xxx;
createScheduleTask(exeModel);
});
}
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者