@Scheduled执行时间未严格按照设定计划执行

      最近在项目中,发现我的定时计划类,未按设定的计划执行@Scheduled(initialDelay = 10000, fixedDelay = 5 * 1000),按说应该每隔五秒中执行一次,但是跟踪日志发现,有时两次执行中间隔时间不是五秒,出现了间隔一分钟,甚至三四分钟的情况。

       后来查询资料发现,springboot项目中,默认是只要一个线程去执行定时计划的,当项目中定时器多起来,这是该线程如果执行别的定时任务阻塞,则会导致其余的定时任务执行时间间隔变长。解决办法也很简单,就是初始一个定时任务执行线程池。

@Configuration
public class ScheduleThreadPool implements SchedulingConfigurer {
    @Override
    public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
        log.info("*****************开始加载定时任务线程池**********************");
        Method[] methods = BatchProperties.Job.class.getMethods();
        int defaultPoolSize = 10;
        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));
        log.info("*****************加载定时任务线程池完毕**********************");
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值