IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 【定时任务】为了这点小事要加班,我丢,老子不干 -> 正文阅读

[Java知识库]【定时任务】为了这点小事要加班,我丢,老子不干

定时任务与cron表达式

前两天公司两个新同事接到了需求。每天晚上11点启动批量任务,往另一个关联系统里发送数据。接到需求,两个新同事愁眉不展,不知道该怎么做。跑过来问我有啥好方法,我问他们打算怎么做,他们说不清楚怎么办才好,甚至做好了加班的准备,两个人每天晚上轮流守着,等到11点启动了批量任务才回家睡觉。我一听,这还了得,每天守着就为了点下鼠标启动一下任务,青春大好时光怎么能浪费在加班上。索引我就给他们出了注意——定时任务,他们一听,喜笑颜开。

考虑到有的人使用的框架可能有所不同,我分了Springboot和普通Spring项目两种来给大家说明。

1. Springboot项目

如果SpringBoot项目启动定时任务,相对比较简单,按照下面的方式新建一个类即可。

@Configuration      //1.主要用于标记配置类,兼备Component的效果。
@EnableScheduling   // 2.开启定时任务
public class TimeTask {
    // 3.添加定时任务  这里设置每5秒掉起一次
    @Scheduled(cron = "0/5 * * * * ?")
    // 或直接指定时间间隔,例如:5秒
    // @Scheduled(fixedRate=5000)
    private void configureTasks() {
        System.err.println("执行静态定时任务时间(TimerTask): " + LocalDateTime.now()+ "=======>  要发送邮件了");
        // 这里写具体要执行的方法
    }
}

在这里插入图片描述

注解的一些说明已经写得很清楚了,不在赘述,只需要写一个类即可。

2. Spring项目

如果你的框架用到了spring,一般项目都会用到,可以这样做。

  1. 在xml里加入task的命名空间
xmlns:task="http://www.springframework.org/schema/task"
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task-4.1.xsd
  1. 启动注解驱动的定时任务,这里有两种方式,一种是单线程,一种是多线程,择一即可,建议用多线程的
<!-- 单线程 -->
<task:annotation-driven/>

<!-- 多线程 -->
<task:scheduler id="scheduler" pool-size="7" />

说明:这里的两种,选择一种即可。我这里多线程的方式设置了线程池大小为7

  1. 编写定时任务的处理类
public class TimeTask {
    public void timeTask1(){
        System.err.println("执行静态定时任务时间(TimerTask): " + LocalDateTime.now()+ "=======>  要发送邮件了");
        // 这里就把你发送邮件的方法加上
    }
    public void timeTask2(){
        System.err.println("执行静态定时任务时间(TimerTask): " + LocalDateTime.now()+ "=======>  要填写工作日报了");
        // 这里就把你填写工作日报的方法加上
    }
}
  1. 将该bean注册到spring中。
<bean id="timeTask" class="com.xxc.controller.TimeTask"/>
<task:scheduled-tasks scheduler="scheduler">
    <task:scheduled ref="timeTask" method="timeTask1" cron="0/5 * * * * ?"/>
    <task:scheduled ref="timeTask" method="timeTask2" cron="0/8 * * * * ?"/>
</task:scheduled-tasks>

在这里插入图片描述

有了这个类,你想加多少个定时任务,往里面加方法就好了。

3. 总结

对于上面两种方法,我们使用到的是cron表达式,这里给大家汇总一下。

cron表达式是一个字符串,字符串以空格隔开,分为5或6隔开,每一个域代表一个含义,系统支持的表达式格式如下:[DayofWeek]为选填。

在这里插入图片描述

字段含义

Second(秒):可出现” * / , - ”四个字符,有效范围为0-59

Minutes(分钟):可出现” * / , - ”四个字符,有效范围为0-59

Hour(时):可出现” * / , - ”四个字符,有效范围为0-23

DayofMonth(月中的某一天):可出现” * / , - ? ”五个字符,有效范围为0-31

Month(年中的某个月):可出现” , - * / ”四个字符,有效范围为1-12的整数或JAN-DEC

DayofWeek(星期几):可出现" * / , - ? "五个字符,有效范围为0-6的整数或SUM-SAT两个范围,0表示星期天,1表示星期一,以此类推。

字符含义

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

? 仅被用于天(月)和天(星期)两个子表达式,表示不指定值,当两个子表达式其中之一被指定了值以后,为了避免冲突,需要将另一个子表达式的值设为” ? ”。

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

/ 表示起始时间开始触发,然后每隔固定时间触发一次,例如在Minutes域使用5/20,则意味着5分钟触发一次,而25,45等分别触发一次。

, 表示列出枚举值。例如:在Minutes域使用5,20,则意味着在5和20分钟分别触发一次。

举例

0 0 10,14,16 * * ? 每天上午10点,下午2点,4点触发

0 0/30 9-17 * * ? 朝九晚五工作时间内每半小时触发一次

0 0 12 ? * WED 表示每个星期三中午12点触发

0 0 12 * * ? 每天中午12点触发

0 15 10 ? * * 每天上午10:15触发

0 * 14 * * ? 在每天下午2点到下午2:59期间的每1分钟触发一次

0 10,44 14 ? 3 WED 每年的三月的星期三的下午2:10和2:44触发

0 15 10 ? * MON-FRI 周一至周五的上午10:15触发

L:表示last,例如星期中表示7或SAT,月份中表示最后一天31或30,6L表示这个月倒数第6天,FRIL表示这个月的最后一个星期五 。

W:只能用在月份中,表示最接近指定天的工作日。

#:只能用在星期中,表示这个月的第几个周几,例如6#3表示这个月的第3个周五。

L:表示last,例如星期中表示7或SAT,月份中表示最后一天31或30,6L表示这个月倒数第6天,FRIL表示这个月的最后一个星期五 。

W:只能用在月份中,表示最接近指定天的工作日。

#:只能用在星期中,表示这个月的第几个周几,例如6#3表示这个月的第3个周五。

说明:这里大家一定要注意哦,上面我们说了有6个域,他们是以空格隔开的,如果举例中有使用符号那就还是一个域。

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-02-22 20:26:07  更:2022-02-22 20:26:25 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 12:05:02-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码