spring-boot 实现定时任务@Scheduled

spring-boot 实现定时任务@Scheduled,第1张

spring-boot 实现定时任务@Scheduled

@Scheduled

只适合处理简单的计划任务,不能处理分布式计划任务。优势:是spring框架提供的计划任务,开发简单,执行效率比较高。且在计划任务数量太多的时候,可能出现阻塞,崩溃,延迟启动等问题

  • 启动类中加入@EnableScheduling
  • 要开启定时任务的方法上加入@Scheduled
  • 设置任务执行的时间间隔

@EnableScheduling 注解的作用是启用Spring的计划任务执行能力。
注意:@EnableScheduling只应用于它的本地应用程序上下文,允许在不同级别选择性地调度bean。

@Scheduled 标记要调度的方法的注释。 必须指定cron、fixedDelay或fixedRate属性中的一个。
带注释的方法必须没有参数。 它通常有一个void返回类型; 如果不是,则通过调度器调用返回值时将被忽略。

比较常用的有两种方式去设置时间间隔,fixedRate和cron表达式

第一种设置时间间隔的方式是fixedRate属性

这种方式比较简单,只适用于对时间掌控不是很高的情况下,例如,每分钟执行一次,部分白天还是黑夜。

@Scheduled(fixedRate = 301000) :表示每30秒执行一次。这个也是按照时间进制来的,1000代表是毫秒进制30代表就是30秒,若是想每小时执行一次也是可以继续16060*1000。

	@Scheduled(fixedRate = 30*1000)
    public void he(){
        System.out.println("女神吃药"+ DateFormat.getDateTimeInstance().format(new Date()));
    }

第二种方式 cron表达式

	@Scheduled(cron = "* * 9-22 * * ?")
    public void show(){
        System.out.println("女神喝水"+ DateFormat.getDateTimeInstance().format(new Date()));
    }

上述cron表达式代表的是:我每个月 每天 9-22时 的每分每秒都执行一次。
cron表达式的时间格式是cron= “秒 分钟 小时 天 月 星期”。
有兴趣学习cron表达式的同学可以点击下面的链接,里面有阿里云提供的详细的教程。
https://help.aliyun.com/knowledge_detail/64769.html

异步多线程定时任务

@Scheduled 在计划任务数量太多的时候,可能出现阻塞,崩溃,延迟启动等问题,为了解决这个问题,我们可以采用异步多线程的方式,利用多个线程来管理定时任务,不让任务丢失。

  • Application启动类中加入开启异步 *** 作的注解 @EnableAsync
  • 在要异步开启定时任务的方法上加入异步注解 @Async

这样就不会一个任务没有执行完毕,而阻塞另一个任务的执行

@EnableAsync 启用Spring的异步方法执行功能

@Async 将方法标记为异步执行候选方法的注释。也可以在类型级别使用,在这种情况下,所有类型的方法都被认为是异步的。但是请注意,@Configuration类中声明的方法不支持 @Async

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5573633.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-14
下一篇 2022-12-14

发表评论

登录后才能评论

评论列表(0条)

保存