在企业的实际生产中,可能需要使用一些定时任务。在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定时任务使用就介绍到这里,你掌握了吗?