spring boot定时任务:
spring boot中,开启定时任务只需要两步:
- 配置启动类
- 在需要定时的方法上添加@Scheduled注解
这里就不再赘述,有需要了解具体步骤,请移步spring boot 使用 @Scheduled 执行定时任务,今天主要讨论的,是spring boot定时任务的线程问题。
在需求多样且复杂的实际业务场景中,对定时执行的方法要求也多有不同;其中有一些方法,可能需要每隔5-10秒执行一次,这类方法执行次数频繁,执行操作复杂。类似这样方法,我们期望的是,每一个不同的定时任务,spring单独开启一个线程来执行,以确保各个定时执行的效率。但,spring真的是这样的吗?
先说结论:所有任务都是在同一个线程池中的同一个线程来完成的。
一,@Scheduled默认以单线程执行所有任务
1.前期准备
ScheduledTaskTest :任务类
如下,我在ScheduledTaskTest 类中,添加了四个每五秒执行一次的定时任务。其中他们的执行时间有一些小不同,执行时属于依次执行。方便浏览日志。
@Component
public class ScheduledTaskTest {
private static final Logger LOGGER = LoggerFactory.getLogger(ScheduledTaskTest.class);
private int taskCount1 = 1;
private int taskCount2 = 1;
private int taskCount3 = 1;
private int taskCount4 = 1;
@Scheduled(cron = "0/5 * * * * ?")
public void setTaskCount1() {
LOGGER.info("(╯‵□′)╯︵┻━┻ setTaskCount_1: 第" + taskCount1++ +"次执行方法");