springboot实现定时任务@Scheduled方式

 更新时间:2024年07月10日 10:16:47   作者:平平常常一般牛  
这篇文章主要介绍了springboot实现定时任务@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= “秒 分钟 小时 天 月 星期”

异步多线程定时任务

@Scheduled 在计划任务数量太多的时候,可能出现阻塞,崩溃,延迟启动等问题

为了解决这个问题,我们可以采用异步多线程的方式,利用多个线程来管理定时任务,不让任务丢失

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

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

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

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 使用log4j2自定义配置文件位置和文件名(附log4j2.xml配置实例)

    使用log4j2自定义配置文件位置和文件名(附log4j2.xml配置实例)

    这篇文章主要介绍了使用log4j2自定义配置文件位置和文件名(附log4j2.xml配置实例),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • Java由浅入深讲解继承上

    Java由浅入深讲解继承上

    继承就是可以直接使用前辈的属性和方法。自然界如果没有继承,那一切都是处于混沌状态。多态是同一个行为具有多个不同表现形式或形态的能力。多态就是同一个接口,使用不同的实例而执行不同操作
    2022-04-04
  • JAVA使用Ldap操作AD域的方法示例

    JAVA使用Ldap操作AD域的方法示例

    这篇文章主要介绍了JAVA使用Ldap操作AD域的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • Java中的引用类型和使用场景详细

    Java中的引用类型和使用场景详细

    这篇文章介绍的是Java中的引用类型和使用场景,主要内容展开Java中的引用类型,有强引用、软引用 、弱引用、虚引用,需要的朋友可以参考一下
    2021-10-10
  • IntelliJ IDEA打开多个Maven的module且相互调用代码的方法

    IntelliJ IDEA打开多个Maven的module且相互调用代码的方法

    这篇文章主要介绍了IntelliJ IDEA打开多个Maven的module且相互调用代码的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-02-02
  • springboot集成gzip和zip数据压缩传输(适用大数据信息传输)

    springboot集成gzip和zip数据压缩传输(适用大数据信息传输)

     在大数据量的传输中,压缩数据后进行传输可以一定程度的解决速度问题,本文主要介绍了springboot集成gzip和zip数据压缩传输,具有一定的参考价值,感兴趣的可以了解一下
    2023-09-09
  • Springboot整合Netty实现RPC服务器的示例代码

    Springboot整合Netty实现RPC服务器的示例代码

    这篇文章主要介绍了Springboot整合Netty实现RPC服务器的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • java实现微信H5支付方法详解

    java实现微信H5支付方法详解

    本篇文章主要介绍了java实现微信H5支付方法详解,非常具有实用价值,需要的朋友可以参考下
    2017-04-04
  • RestTemplate使用不当引发的问题及解决

    RestTemplate使用不当引发的问题及解决

    这篇文章主要介绍了RestTemplate使用不当引发的问题及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • SpringBoot实现前后端分离国际化的示例详解

    SpringBoot实现前后端分离国际化的示例详解

    Springboot国际化可以帮助使用者在不同语言环境中构建应用程序,这样应用程序可以有效地适应不同语言文化背景下的用户需求。本文主要介绍了SpringBoot实现前后端分离国际化的方法,需要的可以参考一下
    2023-02-02

最新评论