下面就来详细讲解“Spring多线程通过@Scheduled实现定时任务”的完整攻略。
什么是@Scheduled
@Scheduled
是一种方便的 Spring 内置注解,可以让你在应用程序中创建定时任务。使用@Scheduled
注解,你可以指定一个固定的延迟、一个固定的间隔(以秒为单位)或一个 cron 表达式(更完整的定时任务调度方法)来触发注解的方法。
如何使用@Scheduled实现定时任务
使用 @Scheduled
实现定时任务有两种方法:
- 基于方法级别的定时任务
- 基于注解方式的定时任务
基于方法级别的定时任务
方法级别的定时任务需要将 @Scheduled
注解应用于需要定时执行的方法上。其语法格式如下:
@Scheduled(fixedDelay = 5000)
public void doSomething() {
// 定时执行的任务代码
}
这里我们以一个定时输出当前时间的例子进行说明:
@Component
public class SchedulerTask {
private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");
/**
* 间隔5秒钟执行
*/
@Scheduled(fixedRate = 5000)
public void reportCurrentTime() {
System.out.println("现在时间:" + dateFormat.format(new Date()));
}
}
在上述代码中,我们使用 @Scheduled(fixedRate = 5000)
注解来指定每隔 5 秒钟执行一次 reportCurrentTime()
方法,并输出当前的时间。
基于注解方式的定时任务
基于注解方式的定时任务需要在配置类中配置 @EnableScheduling
注解开启定时任务调度特性,并在需要定时执行任务的方法使用 @Scheduled
注解进行定时配置。其语法格式如下:
@Configuration
@EnableScheduling
public class SchedulerConfig {
@Scheduled(cron = "*/5 * * * * ?")
public void reportCurrentTime() {
System.out.println("现在时间:" + dateFormat.format(new Date()));
}
}
这里我们以一个每 5 秒钟输出当前时间的例子进行说明:
在核心配置类上标注 @EnableScheduling
注解来启用计划任务,然后在需要计划运行的方法上指定 cron 表达式来配置任务的调度计划。
两条实例说明
示例一
@Component
public class SchedulerTask {
private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");
/**
* 每 minute 执行一次
*/
@Scheduled(cron = "0 * * * * ?")
public void reportCurrentTime() {
System.out.println("现在时间:" + dateFormat.format(new Date()));
}
}
这个定时任务的点用的是 cron 表达式 0 * * * * ?
,即每分钟执行一次。执行结果如下所示:
现在时间:15:01:00
现在时间:15:02:00
现在时间:15:03:00
示例二
@Configuration
@EnableScheduling
public class SchedulerConfig {
@Scheduled(fixedDelayString = "PT10S")
public void reportCurrentTime() {
System.out.println("现在时间:" + dateFormat.format(new Date()));
}
}
这个定时任务通过 fixedDelayString
属性间隔 10 秒钟执行一次,并输出当前时间。执行结果如下所示:
现在时间:15:25:50
现在时间:15:26:00
现在时间:15:26:10
总结
通过以上两个示例,我们可以看出如何通过 Spring 多线程来实现定时任务的。大致步骤包括:
- 创建一个 Spring Boot 应用
- 激活多线程模式,添加相关依赖
- 配置定时任务参数
- 编写定时任务代码
- 运行定时任务
通过实践,我们可以更好地掌握如何使用 Spring 多线程通过 @Scheduled
注解实现定时任务。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring多线程通过@Scheduled实现定时任务 - Python技术站