技术分享:在Main函数中优雅地使用 ThreadPoolTaskScheduler
大家好,我是凯哥Java,今天我们将探讨如何在非Spring环境下,通过Main函数正确地使用ThreadPoolTaskScheduler。同时,我也会分享在Spring环境下如何配置和使用ThreadPoolTaskScheduler。
在Java开发中,我们经常使用Spring框架来简化应用程序的开发。Spring提供了许多便捷的工具,其中包括 ThreadPoolTaskScheduler 用于处理定时任务。然而,当我们希望在非Spring环境下的 main 函数中使用 ThreadPoolTaskScheduler 时,可能会遇到 java.lang.IllegalStateException: ThreadPoolTaskScheduler not initialized 错误。
01
在Main函数中使用ThreadPoolTaskScheduler
通过在调度任务之前调用taskScheduler.initialize(),我们可以顺利地避免ThreadPoolTaskScheduler not initialized的异常。
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import org.springframework.scheduling.support.CronTrigger;
public class MainApplication {
public static void main(String[] args) {
// 初始化 ThreadPoolTaskScheduler
ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();
taskScheduler.setPoolSize(10);
taskScheduler.setRemoveOnCancelPolicy(true);
taskScheduler.setThreadNamePrefix("task-");
// 初始化你的任务和触发器(这里假设 jobDTO 和 cronTrigger 已经定义)
Runnable jobDTO = /* Your Runnable implementation */;
CronTrigger cronTrigger = /* Your CronTrigger implementation */;
// 设置任务调度器
taskScheduler.initialize();
// 使用任务调度器调度任务
taskScheduler.schedule(jobDTO, cronTrigger);
}
}
02
在Spring环境下使用ThreadPoolTaskScheduler
import org.springframework.context.annotation.Bean;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import org.springframework.stereotype.Component;
@Component
public class CollectTaskConfig {
@Bean(name = "collectTaskPool")
public ThreadPoolTaskScheduler threadPoolTaskScheduler(){
ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler();
threadPoolTaskScheduler.setPoolSize(30);
threadPoolTaskScheduler.setRemoveOnCancelPolicy(true);
threadPoolTaskScheduler.setThreadNamePrefix("task-");
return threadPoolTaskScheduler;
}
}
import org.springframework.context.annotation.Bean;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import org.springframework.stereotype.Component;
@Component
public class CollectTaskConfig {
@Bean(name = "collectTaskPool")
public ThreadPoolTaskScheduler threadPoolTaskScheduler(){
ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler();
threadPoolTaskScheduler.setPoolSize(30);
threadPoolTaskScheduler.setRemoveOnCancelPolicy(true);
threadPoolTaskScheduler.setThreadNamePrefix("task-");
return threadPoolTaskScheduler;
}
}
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。