首页 > 其他分享 >spring boot中的定时任务

spring boot中的定时任务

时间:2024-05-21 09:19:11浏览次数:24  
标签:Scheduled spring boot 接口 SchedulingConfigurer 任务 scheduler 定时

  1. SpringBoot中的定时任务主要通过@Scheduled注解以及SchedulingConfigurer接口实现。

  2. @Scheduled注解是Spring提供的一个注解,用于标记方法作为定时任务执行:配置方法在指定的时间间隔或时间点执行,实现各种定时任务需求。

    //在你需要定时的方法上加上@Scheduled注解,并用corn表达式指定如何定时,下式表达了每隔15秒执行一次方法
    @Scheduled(cron = "*/15 * * * * ?")
    public void hello() {
        System.out.println("hello执行了");
    }
    
  3. 但是要记得在启动类上开启定时功能:@EnableScheduling // 开启定时任务功能

  4. @Scheduled任务在单线程环境下执行,可能出现任务堆积的情况,尤其在任务量大或任务执行时间长的情况下,而且这些任务可能会变得混乱和难以管理。定时任务的配置分散在各个任务方法中,不利于统一管理和维护。对于需要根据动态条件创建或销毁定时任务的情况,@Scheduled注解也无法满足需求。

  5. 使用SchedulingConfigurer接口来动态地创建和管理定时任务。通过实现 SchedulingConfigurer 接口,我们可以编写代码来动态地注册和管理定时任务,从而实现灵活的任务调度需求。SchedulingConfigurer 接口是 Spring 提供的一个用于定时任务配置的扩展接口,它允许开发人员更细粒度地控制定时任务的执行。通过实现SchedulingConfigurer接口,可以自定义任务调度器(TaskScheduler),配置线程池等参数,以满足不同场景下的定时任务需求。

    @Configuration  
    @EnableScheduling  
    public class CustomSchedulingConfig implements SchedulingConfigurer {
    
    	@Override  
    	public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
    		// 定时任务逻辑
    	}
    }
    
  6. 通过实现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接口,可以更灵活地配置任务调度器和定时任务的执行规则,比如动态注册定时任务、动态修改任务执行规则等。
    

标签:Scheduled,spring,boot,接口,SchedulingConfigurer,任务,scheduler,定时
From: https://www.cnblogs.com/hytip/p/18203287

相关文章

  • springboot2 - ehcache
    介绍ehcache一下在spring环境下的应用。如果是单机系统,ehcache一般是首选方案,想通过切换redis提高性能,意义不大,反而会增加部署和维护负担。工具函数如果想在spring环境下,封装自己的工具函数,下面这些基础代码估计会用到。场景:像是Excel导入数据,需要大批量更新缓存时......
  • spring boot 邮件发送
    之前的发邮件的话比较繁琐,springbbot帮我们简化了开发,引入mail的启动类支持<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId></dependency>既然springboot中已经配置了,说明它里面肯定有一个关于mail......
  • SpringCache
    实现了基于注解的缓存功能导入依赖org.springframwork.bootspring-boot-starter-cachespring-boot-starter-data-redis2.7.3@EnableCaching一般放在启动类上,表示我们使用基于注解的缓存功能----开启缓存注解功能@Cacheable一般加在方法上,如果查询到缓存,就返回缓存数据......
  • Spring 对 Junit4,Junit5 的支持上的运用
    1.Spring对Junit4,Junit5的支持上的运用@目录1.Spring对Junit4,Junit5的支持上的运用每博一文案2.Spring对Junit4的支持3.Spring对Junit5的支持4.总结:5.最后:每博一文案关于理想主义,在知乎上看到一句话:“他们并不是不懂别人口中的现实,他们只是不信,事情只能是现在......
  • Spring Boot —— 集成文档工具
    Swagger->SpringDoc官网地址:https://springdoc.org/是基于OpenAPI3.0规范构建的集成SwaggerUI和ReDoc文档生成工具,可自动注入OpenAPI规范的JSON描述文件,支持OAUTH2、JWT等认证机制。推荐SpringBoot2.4及以上版本使用springdoc-openapi-ui集成Swagger3.x,SpringBoo......
  • 13年过去了,Spring官方竟然真的支持Bean的异步初始化了!
    你好呀,我是歪歪。两年前我曾经发布过这样的一篇文章《我是真没想到,这个面试题居然从11年前就开始讨论了,而官方今年才表态。》文章主要就是由这个面试题引起:Spring在启动期间会做类扫描,以单例模式放入ioc。但是spring只是一个个类进行处理,如果为了加速,我们取消spring自带......
  • idea中的springboot项目如何重命名而不报错
    在IntelliJIDEA中重命名SpringBoot项目需要一些步骤,以确保项目在重命名后不会报错。以下是详细的步骤指南:1.重命名项目文件夹关闭项目:在IntelliJIDEA中关闭当前项目。重命名文件夹:在文件系统中找到项目所在的文件夹,右键重命名文件夹。重新打开项目:在IntelliJID......
  • springboot的服务不需要连接数据库,如何保证正常启动
    记个小笔记@SpringBootApplication(exclude=DataSourceAutoConfiguration.class)是一个SpringBoot应用程序中用来排除特定自动配置类的注解,一般情况不需要使用数据库,取消这个自动配置即可;如果你这样做了,发现还是出现FailedtoconfigureaDataSource:'url'attributeisn......
  • spring boot如何自定义注解
    总共分三步:1、创建一个注解importjava.lang.annotation.ElementType;importjava.lang.annotation.Retention;importjava.lang.annotation.RetentionPolicy;importjava.lang.annotation.Target;@Target(ElementType.METHOD)//注解的目标为方法@Retention(Retention......
  • Spring Boot —— Filter 过滤器
    目标实现一个自定义过滤器,在所有请求进来时输出点儿信息实现过滤器实现一个自定义过滤器,在所有请求进行业务处理前,在控制台输出请求Id和请求Url@Configuration@EnableWebMvcpublicclassWebConfiguration{publicstaticclassMyFilterimplementsFilter{......