加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 针对不同任务的不同taskScheduler

发布时间:2020-12-15 02:19:52 所属栏目:Java 来源:网络整理
导读:我正在使用 Spring,我在我的应用程序中有几个@Scheduled类: @Componentpublic class CheckHealthTask { @Scheduled(fixedDelay = 10_000) public void checkHealth() { //stuff inside }}@Componentpublic class ReconnectTask { @Scheduled(fixedDelay = 1
我正在使用 Spring,我在我的应用程序中有几个@Scheduled类:

@Component
public class CheckHealthTask {

    @Scheduled(fixedDelay = 10_000)
    public void checkHealth() {
        //stuff inside
    }
}


@Component
public class ReconnectTask {
    @Scheduled(fixedDelay = 1200_000)
     public void run() {
           //stuff here
      }
}

我希望第一个任务使用2个线程池,而第二个任务使用单个线程.我不希望第二个任务被卡住,因为第一个任务使用所有可用的线程,并且计算速度比fixedDelay时间慢.
当然,我的只是一个让你了解这个想法的例子.

我可以使用这样的配置类:

@Configuration
@EnableScheduling
public class TaskConfig implements SchedulingConfigurer {

    @Override
    public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
        taskRegistrar.setScheduler(taskScheduler());
    }

    @Bean
    public Executor taskScheduler() {
        ThreadPoolTaskScheduler t = new ThreadPoolTaskScheduler();
        t.setPoolSize(2);
        t.setThreadNamePrefix("taskScheduler - ");
        t.initialize();
        return t;
    }

}

我不明白如何为每个@Scheduled组件定义不同的配置.

解决方法

第一个任务不需要2个线程的池.

如果全部使用固定延迟,则不需要为不同的任务分配不同的任务. fixedDelay的工作原理如下:

@Scheduled(fixedDelay=5000)
public void doSomething() {
// something that should execute periodically
}

Would be invoked every 5 seconds with a fixed delay,meaning that the period will be measured from the completion time of each preceding invocation.

每个任务只使用一个线程,如果你有两个线程,一个线程不会阻止另一个线程可用于另一个任务.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读