java开发中如何使用定时任务

定时任务概述:

任务调度:

是指系统为了自动完成特定任务,在约定的特定时刻执行任务的过程。有了任务调度,即可解放更多的人力,而是由系统自动去执行任务。

常用业务场景案例:
  • 某电商系统需要在每天上午10点,下午3点,晚上8点发放一批优惠券。
  • 某银行系统需要在信用卡到期还款日的前三天进行短信提醒。
  • 某财务系统需要在每天凌晨0:10结算前一天的财务数据,统计汇总。
  • 12306会根据车次的不同,设置某几个时间点进行分批放票。
如何实现任务调度?
  • 多线程方式,结合sleep

  • JDK提供的API,例如:Timer、ScheduledExecutor

  • 框架,例如Quartz ,它是一个功能强大的任务调度框架,可以满足更多更复杂的调度需求

  • spring task

 cron表达书:
  • cron表达式是一个字符串,用来设置定时规则,由7个部分组成,每部分中间用空格隔开。
7个部分的含义:

  

组成部分含义取值范围
第一部分Seconds (秒)0-59
第二部分Minutes(分)0-59
第三部分Hours(时)0-23
第四部分Day-of-Month(天)1月31日
第五部分Month(月)0-11或JAN-DEC
第六部分Day-of-Week(星期)1-7(1表示星期日)或SUN-SAT
第七部分Year(年) 可选1970-2099

cron表达式也可以设置一些特殊符号,更加灵活的设置定时规则。

符号含义
?表示不确定的值。当两个子表达式其中一个被指定了值以后,为了避免冲突,需要将另外一个的值设为“?”。例如:想在每月20日触发调度,不管20号是星期几,只能用如下写法:0 0 0 20 * ?,其中最后以为只能用“?”
*代表所有可能的值
,设置多个值,例如”26,29,33”表示在26分,29分和33分各自运行一次任务
-设置取值范围,例如”5-20”,表示从5分到20分钟每分钟运行一次任务
/设置频率或间隔,如"1/15"表示从1分开始,每隔15分钟运行一次任务
L用于每月,或每周,表示每月的最后一天,或每个月的最后星期几,例如"6L"表示"每月的最后一个星期五"
W表示离给定日期最近的工作日,例如"15W"放在每月(day-of-month)上表示"离本月15日最近的工作日"
#表示该月第几个周X。例如”6#3”表示该月第3个周五
举例子:

*/5 * * * * ?        每隔5秒运行一次

0 0 11 * * ?        每天11点运行一次

0 0 1 6 * ?        每月6号凌晨1点执行一次

0 0 23 L* ?        每月最后一天23点运行一次

0 28,32,47 * * * ?在 28分,32分,33分运行一次

0 0/30 9-17 * * ?     朝九晚五工作时间内,每半小时运行一次任务

0 15 10 ? * 6#3      每月的第三个星期五上午,10:15运行一次任务

Spring Task入门案例:

1). 导入maven坐标 spring-context 目前项目中只要导入了springboot相关依赖会自动导入,这一步无需操作

2).自定义定时任务类

定义一个定时任务类:

在com.sde包下:新建一个job包,里面新建一个MyTaskOne任务类

@Slf4j
@Component
public class MyTaskOne {}

 编写一个测试方法,每隔5秒执行一次。

代码:

@Slf4j
@Component
public class MyTaskOne {@DisplayName(value = "每隔5秒执行一次")@Scheduled(cron = "0/5 * * * * ?")void test1(){LocalDateTime now = LocalDateTime.now();System.out.println(now);}
}

记得要在我们的spring boot 启动类上,加一个注解:@EnableScheduling

 
@SpringBootApplication
@EnableScheduling
public class ZzylApplication {public static void main(String[] args) {SpringApplication.run(ZzylApplication.class, args);}
}

效果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/609153.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

利用“与非”运算实现布尔代数中的与,或,非三种运算

什么是“与非”运算? 要想明白“与非”运算,首先要明白“与”运算和“非”运算。 “与”运算在离散数学中叫做合取式,也就是A和B相同时为1的时候结果才为1,其余情况都为0 下面是“与”运算的真值表 “非”运算在离散数学中叫做否…

网络协议与攻击模拟_01winshark工具简介

一、TCP/IP协议簇 网络接口层(没有特定的协议) 物理层:PPPOE宽带拨号(应用场景:宽带拨号,运营商切网过来没有固定IP就需要拨号,家庭带宽一般都采用的是拨号方式)数据链路层网络层…

基于共享储能电站的工业用户日前优化经济调度【复现】

文章提出一种基于共享储能电站的工业用户日前优化经济调度方法。首先提出共享储能电站的概念,分析其 商业运营模式。然后将共享储能电站应用到工业用户经济优化调度中,通过协调各用户使用共享储能电站进行充电和 放电的功率,实现用户群日运行…

越南童模受邀参加上海顶级奢侈大秀

陈宝珠 - 2010年出生 - 从小就参与艺术 - 宝珠家庭中的长女。自幼就参加艺术活动,并在现代舞、编舞、古装舞、走秀等方面表现出色,在每一个科目上,宝珠都展现了她的风格和才华。 - 多次获得在越南艺术大赛冠军如:IKIDS越南冠军、T…

Linux第5步_测试虚拟机网络连接

安装好VMwareTools后,就可以测试虚拟机网络连接了,目的是实现虚拟机上网。 1、打开“控制面板”,得到下图: 2、双击“网络和 Internet” ,得到下图: 3、双击“网络和共享中心” 4、点击“更改适配器设置”…

rime中州韵小狼毫 中英互绎 滤镜

英文在日常生活中已经随处可见,我们一般中英互译需要使用专业的翻译软件来实现。但如果我们在输入法中,在输入中文的时候,可以顺便瞟一眼对应的英文词汇,或者在输入英文的时候可以顺便了解对应的中文词汇,那将为我们的…

linux网络配置

一、查看Linux基础得网络设置 1.网关——route -n 2.IP地址——ifconfig 或 ip a ethtool -p ens33 让ens33网卡快速闪烁,分辨网线对应哪个网卡 3.DNS服务器——cat /etc/resolv.conf 4.主机名——hostname 5.路由——route 6.网络连接状态——ss 或 net…

【Java并发】聊聊concurrentHashMap的put核心流程

结构介绍 1.8中concurrentHashMap采用数组链表红黑树的方式存储,并且采用CASSYN的方式。在1.7中主要采用的是数组链表,segment分段锁reentrantlock。本篇主要在1.8基础上介绍下. 那么,我们的主要重点是分析什么呢,其实主要就是p…

银联扫码第三方支付接口申请:开启便捷支付新时代

随着移动支付的普及,越来越多的商家开始接受微信、支付宝等第三方支付平台的付款方式。然而,作为国内最大的银行卡组织,银联也在不断拓展其业务范围,推出了自己的扫码支付接口。本文将为您详细介绍银联扫码第三方支付接口的申请流…

GO语言笔记3-指针

指针的概念 先看一段代码的输出 package main import "fmt" func main(){ var age int 18fmt.Println("age的内存地址值是:",&age)//age的内存地址值是: 0xc000012090// 定义一个指针变量// *int 是一个指针类型,可以理解为指向int类型的…

两个视频怎么合并成一个视频?教你合并视频

两个视频怎么合并成一个视频?如果你是一名视频爱好者,或者是一名自媒体创作者,那么你一定遇到过需要将两个视频合并为一个的情况。有时候,你可能需要将一个长视频切割成多个片段,或者将多个视频片段合并成一个完整的视…

Spring MVC的RequestMapping注解、controller方法返回值

1.使用说明 作用:用于建立请求URL和处理请求方法之间的对应关系。 出现位置: 类上: 请求 URL的第一级访问目录。此处不写的话,就相当于应用的根目录。写的话需要以/开头。它出现的目的是为了使我们的 URL 可以按照模块化管理&…

我的1827创作纪念日

机缘 习惯性早上打开电脑,看看CSDN上的资讯,了解行业动态、当前新的技术和大佬的分享。自己动手写应该是2019 年 01 月 08 日,当时应该是在用安装和使用Oracle,遇到一些问题,写下第一篇博客 Oracle存储过程常见问题及…

一、Mybatis 简介

本章概要 简介持久层框架对比快速入门(基于Mybatis3方式) 1.1 简介 https://mybatis.org/mybatis-3/zh/index.html MyBatis最初是Apache的一个开源项目iBatis, 2010年6月这个项目由Apache Software Foundation迁移到了Google Code。随着开发团队转投G…

【解决方案】 无法将“pip“项识别为 cmdlet、函数、脚本文件

在当今的软件开发和运维领域,Python已经成为了一个不可或缺的工具。而pip,作为Python的包管理工具,更是Python生态系统中不可或缺的一部分。然而,有时候我们可能会遇到一个令人困扰的问题:无法将“pip”项识别为cmdlet…

zookeeper 与eureka区别

CAP定理 在分布式系统的发展中,影响最大的莫过于CAP定理了,是分布式系统发展的理论基石。 2000年,加州大学的计算机科学家 Eric Brewer提出了CAP猜想 2002 年,麻省理工学院的 Seth Gilbert 和 Nancy Lynch 从理论上证明了 CAP 猜…

c++实现支持动态扩容的栈(stack)

1.在栈容量满时自动扩容: 支持自动扩容栈实现: // // myStack.hpp // algo_demo // // Created by Hacker X on 2024/1/9. //#ifndef myStack_hpp #define myStack_hpp #include <stdio.h> #include <string.h> //栈实现 //1.入栈 //2.出栈 //3.空栈 //4.满栈 …

栈的模拟实现

栈的模拟实现 一:什么是栈二:IStack 接口三:MyStack类:1:push(int x):2:pop()3:peek()4:size(),empty(),full() 三:四:栈的时间复杂度: 一:什么是栈 栈是以先进后出(后进先出)的形式来组织数据结构 比如: 先装入的子弹后射出,后装入的子弹先射出,这就是一种典型的栈. 二:ISta…

扩展欧几里得算法总结

知识概览 裴蜀定理&#xff1a;对于任意正整数a&#xff0c;b&#xff0c;一定存在非零整数x&#xff0c;y&#xff0c;使得 而且(a, b)是a和b能凑出来的最小的正整数。 通过扩展欧几里得算法可以求得裴蜀定理中x和y的值&#xff0c;x和y的通解为 &#xff0c; 例题展示 扩展欧…

ChatGPT扩展系列之网易数帆ChatBI

在当今数字化快速发展的时代,数据已经成为业务经营与管理决策的核心驱要素。无论是跨国大企业还是新兴创业公司,正确、迅速地洞察数据已经变得至关重要。然而,传统的BI工具往往对用户有一定的技术门槛,需要熟练的操作技能和复杂的查询语句,这使得大部分的企业员工难以深入…