在非Spring环境下Main方法中,怎么使用spring的ThreadPoolTaskScheduler启动Scheduler?
2023-12-13 18:58:04
作为Java开发人员,在使用spring框架的时候,如果想要获取到线程池对象,可以直接使用spring框架提供的ThreadPoolxxx来获取。那么在非spring环境下,main函数怎么使用ThreadPoolTaskScheduler呢?下面凯哥(凯哥Java:kaigejava)就来讲讲在main函数中怎么使用.
如果我们直接使用下面代码:
ThreadPoolTaskScheduler(); ????????taskScheduler.setPoolSize(10); ????????taskScheduler.setRemoveOnCancelPolicy(true); ????????taskScheduler.setThreadNamePrefix("task-"); ????????ScheduledFuture<?>?scheduledFuture?=?taskScheduler.schedule(jobDTO,?cronTrigger);
在执行后,会报错。错误信息:java.lang.IllegalStateException: 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); ????} }
其实就是在调用任务器调度任务前执行taskScheduler.initializer()就可以了。
扩展:在Spring环境下使用ThreadPoolTaskScheduler
第一步:创建线程池配置
package?com.kaigejava.config; import?org.apache.commons.pool2.BasePooledObjectFactory; import?org.apache.commons.pool2.PooledObject; import?org.apache.commons.pool2.impl.DefaultPooledObject; import?org.apache.commons.pool2.impl.GenericObjectPool; import?org.apache.commons.pool2.impl.GenericObjectPoolConfig; import?org.springframework.context.annotation.Bean; import?org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; import?org.springframework.stereotype.Component; import?javax.script.ScriptContext; import?javax.script.SimpleScriptContext; import?java.time.Duration; /** ?*?线程池的配置类 ?*?@version?1.0 ?*/ @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; ????} ? }
第二步:使用
@Resource(name?=?"collectTaskPool") private?ThreadPoolTaskScheduler?taskScheduler; public?void?taskDoing(){ ?//?初始化你的任务和触发器(这里假设?jobDTO?和?cronTrigger?已经定义) ????????Runnable?jobDTO?=?/*?Your?Runnable?implementation?*/; ????????CronTrigger?cronTrigger?=?/*?Your?CronTrigger?implementation?*/; ?????????//?使用任务调度器调度任务 ????????taskScheduler.schedule(jobDTO,?cronTrigger); }
通过上面两步,就可以在Spring环境下使用带有定时任务的线程池了。
文章来源:https://blog.csdn.net/kaizi_1992/article/details/134852924
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!