下面就是详解SpringBoot开发案例之整合定时任务(Scheduled)的完整攻略。
一、前言
在我们的日常开发中,经常会有需要在指定的时间执行某些任务的需求。比如说定期产生统计报表、备份数据、扫描无效文件等等。在Java开发中,我们可以使用Java自带的Timer/TimerTask类或是Quartz等第三方框架实现定时执行任务。在Spring Boot中,使用定时任务非常简单,可以利用Spring自带的@Scheduled注解来实现。
二、整合定时任务(Scheduled)的操作步骤
1、创建Spring Boot项目
如果你还没有创建Spring Boot项目,可以参考以下操作:
-
在IDE中选择File -> New -> Project -> Spring Initializr。选择一个Maven/Gradle项目,填写名称、GroupId、ArtifactId等信息。
-
选择需要引入的依赖,这里我们需要勾选Spring Web和Spring Task依赖。
-
点击Finish,等待项目创建完成。
2、创建定时任务的方法
在Spring Boot中创建定时任务非常简单,只需要在方法上添加@Scheduled注解并设置相应的属性即可。
下面是这个注解的几个属性的含义:
-
cron:cron表达式,指定任务执行时间。
-
fixedDelay:按固定延迟时间执行任务,单位毫秒。
-
fixedDelayString:同fixedDelay,只是使用字符串形式。
-
fixedRate:按固定的频率执行任务,单位毫秒。
-
fixedRateString:同fixedRate,只是使用字符串形式。
-
initialDelay:初始延迟时间,单位毫秒。
-
initialDelayString:同initialDelay,只是使用字符串形式。
下面是一个简单的例子:
@Component
public class ScheduledTask {
private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
@Scheduled(fixedDelay = 5000)
public void reportCurrentTime() {
System.out.println("现在时间是:" + sdf.format(new Date()));
}
}
上面的例子中,我们通过使用@Scheduled(fixedDelay = 5000)注解,每5秒钟输出一次当前时间。
3、测试定时任务的效果
我们可以使用Spring Boot自带的TaskExecutor和TaskScheduler对任务进行并发控制,TaskScheduler在执行任务时还可以支持断线重连和容错处理。
下面是一个简单的测试例子:
@RestController
public class TestController {
private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
@Autowired
private AsyncRestTemplate asyncRestTemplate;
@GetMapping("/test")
public String test() throws InterruptedException, ExecutionException {
ScheduledExecutorService executorService1 = Executors.newScheduledThreadPool(5);
// 测试单次定时任务
executorService1.schedule(() -> {
System.out.println("single execution: " + sdf.format(new Date()));
}, 5, TimeUnit.SECONDS);
ScheduledExecutorService executorService2 = Executors.newScheduledThreadPool(5);
// 测试间隔定时任务
executorService2.scheduleAtFixedRate(() -> {
System.out.println("fixed rate execution: " + sdf.format(new Date()));
}, 2, 5, TimeUnit.SECONDS);
ScheduledExecutorService executorService3 = Executors.newScheduledThreadPool(5);
// 测试延时定时任务
executorService3.scheduleWithFixedDelay(() -> {
System.out.println("fixed delay execution: " + sdf.format(new Date()));
}, 2, 5, TimeUnit.SECONDS);
return "OK";
}
}
上述测试例子中,我们使用了Spring Boot自带的TaskExecutor和TaskScheduler来测试我们的定时任务。
示例中的第一个定时任务是单次定时执行任务,第二个是间隔定时任务,第三个是延时定时任务。
三、结语
上面就是详解SpringBoot开发案例之整合定时任务(Scheduled)的完整攻略。本文介绍了定时任务的基本实现原理、创建定时任务的方法、测试定时任务的效果等内容。希望可以帮助大家在开发中更好的应用定时任务。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解SpringBoot开发案例之整合定时任务(Scheduled) - Python技术站