ThreadPoolTaskScheduler 在 Main 函

作者: 凯哥Java | 来源:发表于2023-12-09 12:35 被阅读0次

     Scheduler

    技术分享:在Main函数中优雅地使用 ThreadPoolTaskScheduler

    大家好,我是凯哥Java,今天我们将探讨如何在非Spring环境下,通过Main函数正确地使用ThreadPoolTaskScheduler。同时,我也会分享在Spring环境下如何配置和使用ThreadPoolTaskScheduler。

    在Java开发中,我们经常使用Spring框架来简化应用程序的开发。Spring提供了许多便捷的工具,其中包括 ThreadPoolTaskScheduler 用于处理定时任务。然而,当我们希望在非Spring环境下的 main 函数中使用 ThreadPoolTaskScheduler 时,可能会遇到 java.lang.IllegalStateException: ThreadPoolTaskScheduler not initialized 错误。

    01

    在Main函数中使用ThreadPoolTaskScheduler

    在非Spring环境下,直接使用ThreadPoolTaskScheduler时可能会遇到java.lang.IllegalStateException: ThreadPoolTaskScheduler not initialized的错误。为了解决这个问题,我们需要在调度任务之前手动初始化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

    在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.scheduling.concurrent.ThreadPoolTaskScheduler;

    import org.springframework.beans.factory.annotation.Autowired;

    public class YourClass {

       @Autowired

       private ThreadPoolTaskScheduler taskScheduler;

       public void taskDoing(){

           // 初始化你的任务和触发器(这里假设 jobDTO 和 cronTrigger 已经定义)

           Runnable jobDTO = /* Your Runnable implementation */;

           CronTrigger cronTrigger = /* Your CronTrigger implementation */;

           // 使用任务调度器调度任务

           taskScheduler.schedule(jobDTO, cronTrigger);

       }

    }

    通过以上两步,我们就能够在Spring环境下优雅地配置和使用带有定时任务的线程池。希望这份技术分享对大家有所帮助!

    相关文章

      网友评论

        本文标题:ThreadPoolTaskScheduler 在 Main 函

        本文链接:https://www.haomeiwen.com/subject/iknygdtx.html