在非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进行投诉反馈,一经查实,立即删除!