当前位置: 首页 > news >正文

spring-task进行任务调度

java定时任务

背 / 景 / 介 / 绍

近期项目开发中需要发送提醒邮件的功能,即在某个指定日期之前,发送提醒邮件给某人,最后主要通过一个定时扫描的任务来实现的,下面就简单介绍一下如何实现该功能。

定时任务

JAVA实现定时任务的方法有多种,目前主要的几种实现方式:

一、JDK自带 :JDK自带的Timer以及JDK1.5+ 新增的ScheduledExecutorService;

二、Quartz :简单却强大的JAVA作业调度框架

三、Spring3.0以后自带的task :可以将它看成一个轻量级的Quartz,而且使用起来比Quartz简单许多;

本文主要介绍下第三种方式实现定时任务。Spring 3.0+ 自带的任务调度实现,主要依靠TaskScheduler接口的几个实现类实现,具体实现方法如下

(1)Spring配置文件实现

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6NqVc2qA-1661955957784)(upload://zCc6ES5hj2DBHnWPrUcKMateYLQ.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-u3xiDCLb-1661955957785)(upload://h88L5V8vAweB30HCmYiilfqh61d.png)]

(2)注解实现

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PlZtkym8-1661955957785)(upload://3GpKtpRGvQHbFVGLPVqJW572s7R.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4T72iAcu-1661955957785)(upload://xjhxAB1NicXTcwvoRcK6jTWBDtV.png)]

(3)代码动态添加

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nmZZ6pjj-1661955957786)(upload://7Y1hl7hsPxN6rwknkDIgcqvRTbK.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fpuMpTb4-1661955957786)(upload://xNevA58uyKrG1l85OPs9asyiRwU.png)]

cron表达式的使用方法

Cron表达式是一个字符串,字符串以5或6个空格隔开,分为6或7个域,每一个域代表一个含义,Cron有如下两种语法格式:

  • Seconds Minutes Hours DayofMonth Month DayofWeek Year
  • Seconds Minutes Hours DayofMonth Month DayofWeek

每一个域可出现的字符如下:

  • Seconds: 可出现", - * /"四个字符,有效范围为0-59的整数
  • Minutes: 可出现", - * /"四个字符,有效范围为0-59的整数
  • Hours: 可出现", - * /"四个字符,有效范围为0-23的整数
  • DayofMonth: 可出现", - * / ? L W C"八个字符,有效范围为0-31的整数
  • Month: 可出现", - * /"四个字符,有效范围为1-12的整数或JAN-DEC
  • DayofWeek: 可出现", - * / ? L C #"四个字符,有效范围为1-7的整数或SUN-SAT两个范围。1表示星期天,2表示星期一, 依次类推
  • Year: 可出现", - * /"四个字符,有效范围为1970-2099年

其中,每一个域都使用数字,但还可以出现特殊字符,下面简单介绍几个常用的含义:

* 表示匹配该域的任意值,假如在Minutes域使用*, 即表示每分钟都会触发事件。

只能用在DayofMonth和DayofWeek两个域。

- 表示范围,例如在Minutes域使用5-20,表示从5分到20分钟每分钟触发一次。

# 用于确定每个月第几个星期几,只能出现在DayofMonth域。例如在4#2,表示某月的第二个星期三。

总结

以上是java中比较简单的实现定时任务的方法,还有其他两种方法可以查看参考文献。此外java的定时任务还有比较复杂的应用,比如动态增加,以及Quartz的集群模式等在学习中,欢迎大家批评指正。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xQZVWXNl-1661955957786)(upload://5Yx5aAoj4mfQzgvrhyKWiZE7n9c.jpeg)]

▽ 参考文献

1)https://blog.csdn.net/kegumingxin2626/article/details/72854823

2)http://www.jb51.net/article/110541.html

更多技术文章

相关文章:

  • npm实现格式化时间---就是实现时间按照要求输出--moment包
  • webdriver API进阶
  • 除自身以外数组的乘积、找到所有数组中消失的数字、两数之和
  • 四川农信分布式核心设计及验证项目成果专家评审会召开
  • 快速知识蒸馏的视觉框架-来自卡耐基梅隆大学等单位
  • c++ 11 线程支持 (std::promise)
  • 一篇文章带你看清C语言中的类型转换规则
  • 单海军:行业AI平台赋能金融企业数智化转型
  • Jmeter接口自动化(十)断言
  • C++ 小游戏 视频及资料集(7)
  • 计算机网络笔记(王道考研) 第二章:物理层
  • TCP的连接过程——三次握手和四次挥手
  • tensorflow2从入门到精通——DCGAN算法实现
  • 反欺诈黑产总结
  • 学术报告系列(七) - Critical Scenario Based SOTIF Validation Method
  • SegmentFault for Android 3.0 发布
  • 78. Subsets
  • Apache Spark Streaming 使用实例
  • CNN 在图像分割中的简史:从 R-CNN 到 Mask R-CNN
  • GDB 调试 Mysql 实战(三)优先队列排序算法中的行记录长度统计是怎么来的(上)...
  • Laravel核心解读--Facades
  • LeetCode算法系列_0891_子序列宽度之和
  • magento 货币换算
  • Selenium实战教程系列(二)---元素定位
  • Vue源码解析(二)Vue的双向绑定讲解及实现
  • XForms - 更强大的Form
  • 动态规划入门(以爬楼梯为例)
  • 对JS继承的一点思考
  • 对超线程几个不同角度的解释
  • 高程读书笔记 第六章 面向对象程序设计
  • 记录一下第一次使用npm
  • 力扣(LeetCode)56
  • 你不可错过的前端面试题(一)
  • 前端之Sass/Scss实战笔记
  • 区块链将重新定义世界
  • 深度学习入门:10门免费线上课程推荐
  • 听说你叫Java(二)–Servlet请求
  • 突破自己的技术思维
  • 小而合理的前端理论:rscss和rsjs
  • 我们雇佣了一只大猴子...
  • 移动端高清、多屏适配方案
  • #QT(串口助手-界面)
  • #每天一道面试题# 什么是MySQL的回表查询
  • $.ajax()
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (8)STL算法之替换
  • (C#)Windows Shell 外壳编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令...
  • (C语言)fread与fwrite详解
  • (附源码)spring boot建达集团公司平台 毕业设计 141538
  • (十三)Java springcloud B2B2C o2o多用户商城 springcloud架构 - SSO单点登录之OAuth2.0 根据token获取用户信息(4)...
  • (未解决)macOS matplotlib 中文是方框
  • (转)C#开发微信门户及应用(1)--开始使用微信接口
  • (转)JAVA中的堆栈
  • (转)人的集合论——移山之道
  • ****** 二 ******、软设笔记【数据结构】-KMP算法、树、二叉树