老生常谈spring boot中的定时任务
作者:Hanyta
SpringBoot中的定时任务主要通过@Scheduled注解以及SchedulingConfigurer接口实现,本文给大家介绍spring boot中的定时任务,感兴趣的朋友跟随小编一起看看吧
SpringBoot中的定时任务主要通过@Scheduled注解以及SchedulingConfigurer接口实现。
- @Scheduled注解是Spring提供的一个注解,用于标记方法作为定时任务执行:配置方法在指定的时间间隔或时间点执行,实现各种定时任务需求。
//在你需要定时的方法上加上@Scheduled注解,并用corn表达式指定如何定时,下式表达了每隔15秒执行一次方法 @Scheduled(cron = "*/15 * * * * ?") public void hello() { System.out.println("hello执行了"); }
但是要记得在启动类上开启定时功能:@EnableScheduling // 开启定时任务功能
@Scheduled任务在单线程环境下执行,可能出现任务堆积的情况,尤其在任务量大或任务执行时间长的情况下,而且这些任务可能会变得混乱和难以管理。定时任务的配置分散在各个任务方法中,不利于统一管理和维护。对于需要根据动态条件创建或销毁定时任务的情况,@Scheduled注解也无法满足需求。
- 使用SchedulingConfigurer接口来动态地创建和管理定时任务。通过实现 SchedulingConfigurer 接口,我们可以编写代码来动态地注册和管理定时任务,从而实现灵活的任务调度需求。SchedulingConfigurer 接口是 Spring 提供的一个用于定时任务配置的扩展接口,它允许开发人员更细粒度地控制定时任务的执行。通过实现SchedulingConfigurer接口,可以自定义任务调度器(TaskScheduler),配置线程池等参数,以满足不同场景下的定时任务需求。
@Configuration @EnableScheduling public class CustomSchedulingConfig implements SchedulingConfigurer { @Override public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { // 定时任务逻辑 } }
- 通过实现SchedulingConfigurer接口,重写configureTasks方法,自定义任务调度器的配置。此外我们还可以配置线程池,用于控制定时任务执行时的线程数量、并发性等参数。
@Bean(destroyMethod = "shutdown") public ThreadPoolTaskScheduler threadPoolTaskScheduler() { ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler(); scheduler.setPoolSize(5); // 设置线程池大小 scheduler.setThreadNamePrefix("scheduled-task-"); // 设置线程名称前缀 scheduler.setAwaitTerminationSeconds(60); // 设置终止等待时间 // 设置处理拒绝执行的任务异常 scheduler.setRejectedExecutionHandler((r, executor) -> log.error("Task rejected", r)); // 处理定时任务执行过程中抛出的未捕获异常 scheduler.setErrorHandler(e -> log.error("Error in scheduled task", e)); return scheduler; } //然后将自定义的ThreadPoolTaskScheduler设置到ScheduledTaskRegistrar中去: @Override public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { // 定时任务逻辑 taskRegistrar.setTaskScheduler(threadPoolTaskScheduler()); } //通过SchedulingConfigurer接口,可以更灵活地配置任务调度器和定时任务的执行规则,比如动态注册定时任务、动态修改任务执行规则等。
到此这篇关于spring boot中的定时任务的文章就介绍到这了,更多相关spring boot定时任务内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!