java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > springboot定时任务@Scheduled

springboot实现定时任务@Scheduled方式

作者:平平常常一般牛

这篇文章主要介绍了springboot实现定时任务@Scheduled方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

@Scheduled

只适合处理简单的计划任务,不能处理分布式计划任务。

优势:是spring框架提供的计划任务,开发简单,执行效率比较高。

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

@EnableScheduling注解的作用是启用Spring的计划任务执行能力。

注意:

@EnableScheduling只应用于它的本地应用程序上下文,允许在不同级别选择性地调度bean。

@Scheduled标记要调度的方法的注释。必须指定cron、fixedDelay或fixedRate属性中的一个。

带注释的方法必须没有参数。 它通常有一个void返回类型; 如果不是,则通过调度器调用返回值时将被忽略。

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

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

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

@Scheduled(fixedRate = 301000)

	@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 在计划任务数量太多的时候,可能出现阻塞,崩溃,延迟启动等问题

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

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

总结

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

您可能感兴趣的文章:
阅读全文