SpringBoot简单实现定时器过程

 更新时间:2023年04月18日 09:25:46   作者:程序员李哈  
这篇文章主要介绍了SpringBoot简单实现定时器过程,对于Java后端来说肯定实现定时功能肯定是使用到Spring封装好的定时调度Scheduled

前言

公司最近需要完成一个定时去DB查询数据,把有问题的数据给筛选出来通过微信小程序的消息推送功能将有问题的数据推送给指定的员工去筛查问题。对于Java后端来说肯定实现定时功能肯定是使用到Spring封装好的定时调度Scheduled。

正文

定时器的实现

Spring boot启动类代码,加入了@EnableScheduling注解来开启定时器功能

@SpringBootApplication   
@EnableScheduling   // 开启定时功能
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class,args);
    }
}

调度任务代码,需要通过@Component注解将任务类注入到IoC容器中

@Component
public class TestSchedulingTask {
    // 这个cron表达式代表从0秒开始,每过3秒执行一次。
    @Scheduled(cron = "0/3 * * * * ?")
    public void test(){
        // 大家可以根据公司的业务来实现,更希望是@Autowrite注入service层的接口,业务逻辑写在service层中。
        // 这里测试我就输出当前系统时间了...
        Date date  = new Date(System.currentTimeMillis());
        String rule = "yyyy-MM-dd HH:mm:ss";
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat(rule);
        String format = simpleDateFormat.format(date);
        System.out.println(format);
    }
}

这里注意每个任务方法都要加上@Scheduled注解,并且规定好cron表达式。

完全可以放心,不会cron表达式没关系,后面会详细讲解,并且网上也有在线生成cron表达式的网站,我们来看看控制台输出的结果吧。

cron表达式详解

cron表达式

字段范围允许的字符
秒(second)0-59,/-*
分(minute)0-59,/-*
小时(hour)0-23,/-*
日期(day of month)1-31(需要考虑月份不一致),/-*?LW
月份(month)1-12(对应的英文缩写也行),/-*
星期(day of week)1-7,/-*?L
年(year)这玩意基本用不到这玩意基本用不到

允许的字符的解释:

,:算是一个枚举,多值的存在,比如second中5,20就代表5和20秒的时候触发。

/:值1/值2,值1代表开始时间,值2代表隔多久一次,比如我案例中就是从0秒开始3秒触发一次。

-:范围值,从多久到多久。

*:全部范围通用。

?:只存在于日期和星期中,假如你想要每个月2号触发,但是你星期用*就会每天都会触发,就会产生bug,所以需要?来代替*。

L:表示最后的意思,出现在日期和星期中,比如在日期中使用L就代表当月最后一天,在星期中使用3L就代表最后一个星期三触发。

W:表示工作日,在日期中使用,假如使用9W,如果9号是星期1-5就直接触发,如果9号是星期六就8号触发,如果9号是星期天就星期一触发也就是10号触发。

其实懂个大概就够了,能做笔记记录是最好,因为有在线生成网站,百度随便就能找到

总结

因为本人项目暂时不用考虑异步之类的所以本帖暂时没有带来异步的定时器,不过后续会出异步的帖子,关于定时任务的底层源码也会出篇帖子来细讲。

到此这篇关于SpringBoot简单实现定时器过程的文章就介绍到这了,更多相关SpringBoot定时器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Spring Boot在Web应用中基于JdbcRealm安全验证过程

    Spring Boot在Web应用中基于JdbcRealm安全验证过程

    这篇文章主要为大家介绍了Spring Boot在Web应用中基于JdbcRealm安全验证过程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪<BR>
    2023-02-02
  • Java结合redis实现接口防重复提交

    Java结合redis实现接口防重复提交

    本文主要介绍了Java结合redis实现接口防重复提交,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • Java的最大栈深度与JVM核心知识介绍

    Java的最大栈深度与JVM核心知识介绍

    这篇文章主要有两个部分,一部分介绍JAVA的最大栈深度,第二部分介绍了JVM核心知识,需要的朋友可以参考下面文章的具体内容
    2021-09-09
  • Java JVM程序指令码实例解析

    Java JVM程序指令码实例解析

    这篇文章主要介绍了Java JVM程序指令码实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • Java通过SSM完成水果商城批发平台流程

    Java通过SSM完成水果商城批发平台流程

    这是一个使用了java+SSM开发的网上水果商城批发平台,是一个实战小练习,具有水果商城批发该有的所有功能,感兴趣的朋友快来看看吧
    2022-06-06
  • java获得mysql和oracle链接的类

    java获得mysql和oracle链接的类

    这篇文章主要介绍了java获得mysql和oracle链接的类,可实现基于jdbc的mysql与oracle数据库连接,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • SpringCloud turbine监控实现过程解析

    SpringCloud turbine监控实现过程解析

    这篇文章主要介绍了SpringCloud turbine监控实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • java IO流 之 输出流 OutputString()的使用

    java IO流 之 输出流 OutputString()的使用

    这篇文章主要介绍了java IO流 之 输出流 OutputString()的使用的相关资料,需要的朋友可以参考下
    2016-12-12
  • Java concurrency之锁_动力节点Java学院整理

    Java concurrency之锁_动力节点Java学院整理

    这篇文章主要为大家详细介绍了Java concurrency之锁的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • SpringSession会话管理之Redis与JDBC存储实现方式

    SpringSession会话管理之Redis与JDBC存储实现方式

    本文将详细介绍Spring Session的核心概念、特性以及如何使用Redis和JDBC来实现会话存储,帮助开发者构建更加健壮和可扩展的应用系统,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-04-04

最新评论