在企業的實際生產中,可能需要使用一些定時任務。在Spring中使用定時器是比較簡單的,首先在配置文件中加入@EnabelScheduling,就能夠使用註解驅動定時任務的機制,然後可以通過註解@Scheduled去配置如何定時。
我們先在Spring Boot的啓動類中加入@EnabelScheduling註解,然後開一個服務類,代碼如下:
package com.martin.config.other.scheduler;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
/**
* @author: martin
* @date: 2020/2/6
*/
@Service
@Slf4j
public class ScheduleServiceImpl implements SchedeluService {
@Scheduled(fixedRate = 1000)
@Async
@Override
public void job1() {
log.error("job1執行:{}", Thread.currentThread().getName());
}
@Scheduled(fixedRate = 2000)
@Override
public void job2() {
log.error("job2執行:{}", Thread.currentThread().getName());
}
}
註解@Scheduled配置爲按指定時間間隔執行,使用@Async註解代表這需要使用異步線程去執行。輸出的結果如下:
2020-02-06 16:59:33.483 ERROR 9908 --- [lTaskExecutor-6] c.m.c.o.scheduler.ScheduleServiceImpl : job1執行:ThreadPoolTaskExecutor-6
2020-02-06 16:59:34.484 ERROR 9908 --- [pool-1-thread-1] c.m.c.o.scheduler.ScheduleServiceImpl : job2執行:pool-1-thread-1
2020-02-06 16:59:34.486 ERROR 9908 --- [lTaskExecutor-7] c.m.c.o.scheduler.ScheduleServiceImpl : job1執行:ThreadPoolTaskExecutor-7
2020-02-06 16:59:35.485 ERROR 9908 --- [lTaskExecutor-8] c.m.c.o.scheduler.ScheduleServiceImpl : job1執行:ThreadPoolTaskExecutor-8
2020-02-06 16:59:36.483 ERROR 9908 --- [pool-1-thread-1] c.m.c.o.scheduler.ScheduleServiceImpl : job2執行:pool-1-thread-1
2020-02-06 16:59:36.485 ERROR 9908 --- [lTaskExecutor-9] c.m.c.o.scheduler.ScheduleServiceImpl : job1執行:ThreadPoolTaskExecutor-9
2020-02-06 16:59:37.485 ERROR 9908 --- [TaskExecutor-10] c.m.c.o.scheduler.ScheduleServiceImpl : job1執行:ThreadPoolTaskExecutor-10
2020-02-06 16:59:38.484 ERROR 9908 --- [pool-1-thread-1] c.m.c.o.scheduler.ScheduleServiceImpl : job2執行:pool-1-thread-1
除了指定時間間隔執行,@Scheduled註解還提供了一些其他的配置項:
這些配置項中,cron是我們比較常見的使用方式,cron可以通過表達式更爲靈活地配置運行得方式,關於cron的使用我們可以參考http://cron.qqe2.com/
到這裏,關於Spring定時任務使用就介紹到這裏,你掌握了嗎?