SpringBoot 定时任务の @Scheduled 并行 配置

本文介绍如何在SpringBoot中使用@Scheduled注解实现定时任务,并通过配置实现任务的并行执行。初始情况下,定时任务默认为串行执行,通过自定义线程池设置可转变为并行执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前两天用springboot 写了个定时任务,想要让系统定时去做某些事情 ,并且希望是并行。
然后用到了 @Scheduled 这个注解
代码如下

@Component
@EnableScheduling
public class AsyncTaskHandlerTask {

    private static final Logger logger = LogManager.getLogger(AsyncTaskHandlerTask.class);

    @Scheduled(cron = "0 0/1 * * * ?")
    public void task1() {
        logger.info("tast1___________________");
        try {
            Thread.sleep(1000);
        }catch (Exception e){
            e.printStackTrace();
        }
        logger.info("tast1-------------------");
    }

    @Scheduled(cron = "0 0/1 * * * ?")
    public void task2() {
        logger.info("tast2++++++++++++++++++++");
    }
}

运行结果

2018-03-29 17:38:00.001  INFO 6160 --- [pool-1-thread-2] AsyncTaskHandlerTask                     : tast1___________________
2018-03-29 17:38:00.002  INFO 6160 --- [pool-1-thread-2] AsyncTaskHandlerTask                     : tast1-------------------
2018-03-29 17:38:01.001  NFO 6160 --- [pool-1-thread-1] AsyncTaskHandlerTask                     : tast2++++++++++++++++++++

看到运行结果不对啊,这不是串行吗?然后找了很多资料,哦 原来这种方式默认是串行的  要想并行 还需要一个配置  如下

@Configuration
@EnableScheduling
public class ScheduleConfig implements SchedulingConfigurer {

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

@Bean(destroyMethod="shutdown")
public Executor taskExecutor() {
    return Executors.newScheduledThreadPool(100);
}

}

再看运行结果 

2018-03-29 20:45:00.002 INFO 6160 — [pool-1-thread-9] AsyncTaskHandlerTask : tast1___________________
2018-03-29 20:45:00.003 INFO 6160 — [pool-1-thread-5] AsyncTaskHandlerTask : tast2++++++++++++++++++++
2018-03-29 20:45:01.002 INFO 6160 — [pool-1-thread-9] AsyncTaskHandlerTask : tast1——————-“`

Perfect!!!!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值