Spring動態(tài)創(chuàng)建定時任務(wù)

創(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)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容