千家信息网

springboot中schedule怎么解决定时任务不执行的问题

发表于:2025-01-18 作者:千家信息网编辑
千家信息网最后更新 2025年01月18日,本篇内容介绍了"springboot中schedule怎么解决定时任务不执行的问题"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望
千家信息网最后更新 2025年01月18日springboot中schedule怎么解决定时任务不执行的问题

本篇内容介绍了"springboot中schedule怎么解决定时任务不执行的问题"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

@schedule 注解 是springboot 常用的定时任务注解,使用起来简单方便,但是如果定时任务非常多,或者有的任务很耗时,会影响到其他定时任务的执行,因为schedule 默认是单线程的,一个任务在执行时,其他任务是不能执行的.解决办法是重新配置schedule,改为多线程执行.只需要增加下面的配置类就可以了.

import org.springframework.boot.autoconfigure.batch.BatchProperties;import org.springframework.context.annotation.Configuration;import org.springframework.scheduling.annotation.Scheduled;import org.springframework.scheduling.annotation.SchedulingConfigurer;import org.springframework.scheduling.config.ScheduledTaskRegistrar;import java.lang.reflect.Method;import java.util.concurrent.Executors;@Configurationpublic class ScheduleConfig implements SchedulingConfigurer {  @Override  public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {    Method[] methods = BatchProperties.Job.class.getMethods();    int defaultPoolSize = 3;    int corePoolSize = 0;    if (methods != null && methods.length > 0) {      for (Method method : methods) {        Scheduled annotation = method.getAnnotation(Scheduled.class);        if (annotation != null) {          corePoolSize++;        }      }      if (defaultPoolSize > corePoolSize)        corePoolSize = defaultPoolSize;    }    taskRegistrar.setScheduler(Executors.newScheduledThreadPool(corePoolSize));  }}

"springboot中schedule怎么解决定时任务不执行的问题"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

0