任务调度Quartz框架
任务调度框架Quartz
[建立高效可控的任务调度系统]
[各种企业应用几乎都会碰到任务调度的需求,e.g.:定时清理系统垃圾文件,定时导入导出数据,定时发送邮件等等业务场景,Quartz提供了这样的功能,并且高度可控,本文将带您一起领略Quartz的风采]
注:资料来源于网络,版权归原作者所有,仅供学习之用
[2010-11-30][村长]
目录
Quartz任务调度 ............................................................................................................................... 3
quartz简介........................................................................................................................................ 3
Quartz体系结构 ............................................................................................................................... 3
Quartz实例入门 ............................................................................................................................... 6
任务调度信息存储 ......................................................................................................................... 15
小结 ................................................................................................................................................ 20
附录1 ............................................................................................................................................. 20
Quartz任务调度
quartz简介
各种企业应用几乎都会碰到任务调度的需求,就拿论坛来说:每隔半个小时生成精华文章的RSS文件,每天凌晨统计论坛用户的积分排名,每隔30分钟执行锁定用户解锁任务。
对于一个典型的MIS系统来说,在每月1号凌晨统计上个月各部门的业务数据生成月报表,每半个小时查询用户是否已经有快到期的待处理业务……,这样的例子俯拾皆是,不胜枚举。
任务调度本身涉及到多线程并发、运行时间规则制定和解析、场景保持与恢复、线程池维护等诸多方面的工作。如果直接使用自定义线程这种刀耕火种的原始办法,开发任务调度程序是一项颇具挑战性的工作。Java开源的好处就是:领域问题都能找到现成的解决方案。
OpenSymphony所提供的Quartz自2001年发布版本以来已经被众多项目作为任务调度的解决方案,Quartz在提供巨大灵活性的同时并未牺牲其简单性,它所提供的强大功能使你可以应付绝大多数的调度需求。
Quartz 在开源任务调度框架中的翘首,它提供了强大任务调度机制,难能可贵的是它同时保持了使用的简单性。Quartz 允许开发人员灵活地定义触发器的调度时间表,并可以对触发器和任务进行关联映射。
此外,Quartz提供了调度运行环境的持久化机制,可以保存并恢复调度现场,即使系统因故障关闭,任务调度现场数据并不会丢失。此外,Quartz还提供了组件式的侦听器、各种插件、线程池等功能。
Quartz体系结构
Quartz对任务调度的领域问题进行了高度的抽象,提出了调度器、任务和触发器这3个核心的概念,并在org.quartz通过接口和类对重要的这些核心概念进行描述:
●Job:是一个接口,只有一个方法void execute(JobExecutionContext context),开发者实现该接口定义运行任务,JobExecutionContext类提供了调度上下文的各种信息。Job运行时的信息保存在JobDataMap实例中; ●JobDetail:Quartz在每次执行Job时,都重新创建一个Job实例,所以它不直接接受一个Job的实例,相反它接收一个Job实现类,以便运行时通过newInstance()的反射机制实例化Job。因此需要通过一个类来描述Job的实现类及其它相关的静态信息,如Job名字、描述、关联监听器等信息,JobDetail承担了这一角色。
通过该类的构造函数可以更具体地了解它的功用:JobDetail(ng.String name,
ng.String group, ng.Class jobClass),该构造函数要求指定Job的实现类,以及任务在Scheduler中的组名和Job名称;
●Trigger:是一个类,描述触发Job执行的时间触发规则。主要有SimpleTrigger和CronTrigger这两个子类。当仅需触发一次或者以固定时间间隔周期执行,SimpleTrigger是最适合的选择;而CronTrigger则可以通过Cron表达式定义出各种复杂时间规则的调度方案:如每早晨9:00执行,周一、周三、周五下午5:00执行等;
●Calendar:org.quartz.Calendar和java.util.Calendar不同,它是一些日历特定时间点的集合(可以简单地将org.quartz.Calendar看作java.util.Calendar的集合——java.util.Calendar代表一个日历时间点,无特殊说明后面的Calendar即指org.quartz.Calendar)。一个Trigger可以和多个Calendar关联,以便排除或包含某些时间点。
假设,我们安排每周星期一早上10:00执行任务,但是如果碰到法定的节日,任务则不执行,这时就需要在Trigger触发机制的基础上使用Calendar进行定点排除。针对不同时间段类型,Quartz在org.quartz.impl.calendar包下提供了若干个Calendar的实现类,如AnnualCalendar、MonthlyCalendar、WeeklyCalendar分别针对每年、每月和每周进行定义;
●Scheduler:代表一个Quartz的独立运行容器,Trigger和JobDetail可以注册到Scheduler中,两者在Scheduler中拥有各自的组及名称,组及名称是Scheduler查找定位容器中某一对象的依据,Trigger的组及名称必须唯一,JobDetail的组和名称也必须唯一(但可以和Trigger的组和名称相同,因为它们是不同类型的)。Scheduler定义了多个接口方法,允许外部通过组及名称访问和控制容器中Trigger和JobDetail。
Scheduler可以将Trigger绑定到某一JobDetail中,这样当Trigger触发时,对应的Job就被执行。一个Job可以对应多个Trigger,但一个Trigger只能对应一个Job。可以通过SchedulerFactory创建一个Scheduler实例。Scheduler拥有一个SchedulerContext,它类似于ServletContext,保存着Scheduler上下文信息,Job和Trigger都可以访问SchedulerContext内的信息。SchedulerContext内部通过一个Map,以键值对的方式维护这些上下文数据,SchedulerContext为保存和获取数据提供了多个put()和getXxx()的方法。可以通过Scheduler# getContext()获取对应的SchedulerContext实例;
●ThreadPool:Scheduler使用一个线程池作为任务运行的基础设施,任务通过共享线程池中的线程提高运行效率。
Job有一个StatefulJob子接口,代表有状态的任务,该接口是一个没有方法的标签接口,其目的是让Quartz知道任务的类型,以便采用不同的执行方案。无状态任务在执行时拥有自己的JobDataMap拷贝,对JobDataMap的更改不会影响下次的执行。而有状态任务共享共享同一个JobDataMap实例,每次任务执行对JobDataMap所做的更改会保存下来,后面的执行可以看到这个更改,也即每次执行任务后都会对后面的执行发生影响。
正因为这个原因,无状态的Job可以并发执行,而有状态的StatefulJob不能并发执行,这意味着如果前次的StatefulJob还没有执行完毕,下一次的任务将阻塞等待,直到前次任务执行完毕。有状态任务比无状态任务需要考虑更多的因素,程序往往拥有更高的复杂度,因此除非必要,应该尽量使用无状态的Job。
如果Quartz使用了数据库持久化任务调度信息,无状态的JobDataMap仅会在Scheduler注册任务时保持一次,而有状态任务对应的JobDataMap在每次执行任务后都会进行保存。
Trigger自身也可以拥有一个JobDataMap,其关联的Job可以通过JobExecutionContext#getTrigger().getJobDataMap()获取Trigger中的JobDataMap。不管是有状态还是无状态的任务,在任务执行期间对Trigger的JobDataMap所做的更改都不会进行持久,也即不会对下次的执行产生影响。
Quartz拥有完善的事件和监听体系,大部分组件都拥有事件,如任务执行前事件、任务执行后事件、触发器触发前事件、触发后事件、调度器开始事件、关闭事件等等,可以注册相应的监听器处理感兴趣的事件。
图1描述了Scheduler的内部组件结构,SchedulerContext提供Scheduler全局可见的上下文信息,每一个任务都对应一个JobDataMap,虚线表达的JobDataMap表示对应有状态的任务:
图1 Scheduler结构图
一个Scheduler可以拥有多个Triger组和多个JobDetail组,注册Trigger和JobDetail时,如果不显式指定所属的组,Scheduler将放入到默认组中,默认组的组名为Scheduler.DEFAULT_GROUP。组名和名称组成了对象的全名,同一类型对象的全名不能相同。
基于Quartz的网管系统任务调度的实现
第24卷第7期 电脑开发与应用
文章编号:1003-5850(2011)07-0023-02
基于Quartz的网管系统任务调度的实现
The Task Scheduling of Network Management System Based on Quartz
王銮董志勇
(南京信息职业技术学院计算机与软件学院 南京 210046)
【摘 要】网管系统的大部分功能都需要以任务调度的形式实现,介绍了基于Quartz框架的网管系统任务调度的
实现方法。实践证明,该方法具有较好的扩展性,在大量任务并发的网管系统中执行效率较高。 【关键词】Quartz,网管系统,任务调度
中图分类号:TP311 文献标识码:A
ABSTRACT There are many task scheduling in network management system,This paper introduces how tO design and implement the task scheduling based on Quartz in network management system.The practice proves that the system meets the requirement of
Extensibility and high efficiency. KEYWORDS Quartz,network management system,task scheduling
随着计算机和通信技术的飞速发展,网络管理技
术已成为重要的前言技术。网络管理范围为网络中的
设备,包括路由器、交换机、AP、无线交换机和其他相
关网络设备。网络管理主要功能有:配置管理、性能管
理、故障管理、安全管理和计费管理。大部分网管功能
需要以任务调度的形式解决,因此一个高效、可扩展的
任务调度模型对于网管系统的设计是至关重要的。
elasticjob 原理
- 1 - elasticjob 原理
ElasticJob是一个分布式的任务调度框架,它基于开源的Quartz和Sharding-JDBC实现了分布式的任务调度和数据分片。
ElasticJob的原理可以分为以下几个方面:
1. 任务分片
ElasticJob采用分片的方式将任务分成若干个小的任务单元,每个任务单元都是一个独立的任务,这些任务单元会分配到不同的分布式节点上去执行,从而实现任务的分布式处理。
2. 任务调度
ElasticJob采用Zookeeper来实现任务的调度和管理,所有的任务都会注册到Zookeeper上,当任务需要执行时,Zookeeper会从可用的节点中选取一个节点来执行任务。
3. 数据分片
ElasticJob通过Sharding-JDBC实现了数据分片,可以将一个大的数据集合拆分成若干个小的数据片,每个数据片可以分别存储在不同的数据库或表中,从而实现数据的分布式处理。
4. 任务监控
ElasticJob提供了丰富的任务监控功能,可以通过控制台或API接口查看任务的执行情况、任务的状态、任务的日志等信息,从而方便用户对任务进行管理和调优。
总之,ElasticJob的原理是基于分片和分布式的思想,通过任务分片、数据分片、任务调度和任务监控等多种技术手段来实现任务 - 2 - 的分布式处理和管理。
quartz 实现job类 的 execute 方法-概述说明以及解释
quartz 实现job类 的 execute 方法-概述说明以及解释
1.引言
1.1 概述
在使用Quartz框架开发定时任务时,我们经常需要实现一个Job类,并在其中编写具体的任务逻辑。而Job类的核心方法就是execute方法,它定义了当定时任务被触发时所执行的逻辑。因此,正确实现execute方法是保证定时任务准确执行的关键。
在本文中,我们将深入探讨Quartz框架中Job接口以及execute方法的作用和实现方式。我们将介绍Quartz框架的基本概念,Job接口的作用,以及如何正确地实现Job类的execute方法。通过本文的学习,读者将能够深入理解Quartz框架的核心机制,并能够准确地编写定时任务的业务逻辑。
1.2 文章结构
本文将分为引言、正文和结论三个部分。在引言部分,将对文章的概述、结构和目的进行介绍,为读者提供整体的阅读指引。在正文部分,将首先简要介绍Quartz框架的基本概念和特点,然后重点讨论Job接口及其核心方法execute方法的作用和实现方式。最后,将详细探讨如何实现一个含有execute方法的Job类,并通过示例代码进行说明。在结论部分,将总结实现execute方法的重要性,提供进一步学习和实践的建议,并结束全文的讨论。整体结构清晰,内容丰富,旨在帮助读者深入理解Quartz框架中的Job执行机制。
1.3 目的
本文的主要目的是探讨如何实现Quartz框架中Job类的execute方法。通过深入研究Quartz框架的Job接口以及execute方法的功能和作用,我们将能够更好地理解定时任务调度的机制和原理。此外,通过具体的示例和实践操作,我们将向读者展示如何实现一个自定义的Job类,并编写其execute方法,从而实现定时任务的具体业务逻辑。
通过本文的学习,读者将能够掌握Quartz框架的基本原理和用法,了解Job类的重要性以及execute方法的作用。同时,通过实际操作和实现的过程,读者将能够提升自己的编程技能和对定时任务调度的理解,为今后在实际项目中应用Quartz框架提供有力支持。希望本文能够帮助读者更深入地了解Quartz框架,并在实际项目中取得更好的应用效果。
quartz qrtz_locks用法 -回复
quartz qrtz_locks用法 -回复
Quartz qrtz_locks用法
Quartz是一个功能强大的开源作业调度器,可以帮助开发人员在Java应用程序中实现作业调度和管理。其中,qrtz_locks是Quartz库中的一个特定类,用于实现分布式锁功能。本文将介绍qrtz_locks的用法,并一步一步回答有关该功能的问题。
第一节:qrtz_locks概述
qrtz_locks是Quartz库中的一个类,旨在为Quartz调度器提供分布式锁功能。Quartz调度器可以被多个应用程序实例同时使用,每个实例都可以尝试获取和释放相同的作业任务。使用分布式锁能够确保在同一时间只有一个应用程序实例能够成功地获取和执行作业任务。
第二节:使用qrtz_locks的步骤
1. 导入Quartz库
首先,确保项目已经包含了Quartz库的依赖,可以从其官方网站或其他开发资源中获得。
2. 创建Quartz调度器
在代码中创建Quartz调度器的实例,在整个项目中统一管理所有的作业任务。
3. 配置qrtz_locks
在Quartz调度器的配置文件中,找到对应的qrtz_locks配置项,根据需求进行相应的配置。可以设置分布式锁的类型(如基于数据库、缓存等)、超时时间等参数。
4. 编写作业任务
在代码中编写具体的作业任务,可以根据业务需求定义不同类型的任务。
5. 获取和释放锁
在每个作业任务的开始和结束阶段,使用qrtz_locks提供的API来获取和释放分布式锁。通过获取锁,确保当前实例是唯一的执行者,成功执行作业任务。
第三节:常见问题解答
1. 为什么需要使用qrtz_locks?
使用qrtz_locks可以解决Quartz调度器的分布式并发问题。在多个应用程序实例同时使用Quartz调度器情况下,每个实例都会尝试执行相同的作业任务。使用分布式锁能够确保只有一个实例能够成功获取锁并执行任务。
quartz的cron表达式
quartz的cron表达式
Quartz的Cron表达式简介
1. 什么是Cron表达式
Cron表达式是一种用于定时任务调度的标准格式。在Quartz框架中,Cron表达式被广泛使用,用于设置任务的执行时间。
2. Cron表达式的语法
Cron表达式由6个或7个字段组成,每个字段代表时间的一个维度。这6个或7个字段分别是:
• 秒(0~59)
• 分钟(0~59)
• 小时(0~23)
• 日(1~31)
• 月(1~12)
• 周几(0~7,0和7都代表周日)
可以使用通配符或范围来表示时间的不确定性。例如,“*“代表所有可能的值,”?“在日和周几字段中代表不指定值,”-“用来表示范围,” / “用来表示递增间隔。 例如,要设置每天早上9点执行任务,Cron表达式可以是0 0
9 ? * *。
3. 常用的Cron表达式示例
以下是一些常见的Cron表达式示例:
• 0 0/5 * * * ? 表示每隔5分钟执行一次任务。
• 0 0 12 * * ? 表示每天中午12点执行任务。
• 0 0 8 ? * MON-FRI 表示周一到周五每天早上8点执行任务。
• 0 0 8 ? * 6L 表示每个月的最后一个周五早上8点执行任务。
4. Cron表达式的高级用法
Cron表达式还支持一些高级功能,例如使用”#“指定月份中的第几个周几,使用”L”指定月份中的最后一天,使用”W”指定平日最近的工作日等等。
以下是一些高级用法的示例:
• 0 0 12 ? JAN,FEB,DEC * 表示一月、二月和十二月每天中午12点执行任务。
• 0 0/30 9-17 * * MON-FRI#2 表示周一到周五上午9点到下午5点之间,每隔30分钟执行一次任务,并且每个月的第二个周一符合条件。 5. 总结
Cron表达式是Quartz框架中用于指定任务执行时间的标准格式。它非常灵活,并且支持多种时间维度的设置。掌握Cron表达式的语法和常用示例,可以帮助我们轻松实现定时任务的调度。
quartz用法
quartz用法
Quartz是一个流行的Java调度框架,它允许开发人员创建基于时间的作业,例如定期执行任务、发送电子邮件等。Quartz提供了许多功能,包括可靠性、灵活性和可扩展性。本文将介绍Quartz的用法,包括安装、配置、创建作业和触发器以及使用监听器和集群。
一、安装
1. 下载Quartz
您可以从Quartz官方网站下载最新版本的Quartz。解压缩下载后的文件,并将其放置在您选择的位置。
2. 添加依赖项
在您的Java项目中添加以下依赖项:
```xml
org.quartz-scheduler
quartz 2.3.2
```
3. 创建数据库表
Quartz需要一个数据库来存储作业和触发器信息。您可以使用提供的SQL脚本来创建表或手动创建表。请注意,不同版本的Quartz可能需要不同版本的SQL脚本。
二、配置
1. 创建调度器
在Java代码中创建调度器对象:
```java
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
Scheduler scheduler = schedulerFactory.getScheduler();
```
2. 配置数据源
如果您选择使用数据库存储作业和触发器信息,则需要配置数据源。以下是一个示例:
```xml
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
value="com.mysql.jdbc.Driver"/>
value="jdbc:mysql://localhost:3306/quartz"/>
```
3. 配置作业和触发器
使用以下代码配置作业和触发器:
```java
JobDetail job =
quartz集群防止多个实例重复执行原理
Quartz集裙是一个非常强大的任务调度框架,它可以让我们方便地管理和调度任务。在Quartz集裙中,我们经常会遇到一个问题,就是多个实例重复执行任务的情况。这种情况会导致一些严重的后果,比如数据不一致,任务执行效率低下等问题。我们需要一些机制来避免多个实例同时执行同一个任务。本文将介绍Quartz集裙是如何防止多个实例重复执行的原理。
1. 分布式锁
Quartz集裙防止多个实例重复执行的原理之一就是使用分布式锁。当有任务需要执行时,Quartz集裙中的每一个实例会尝试获取一个全局的锁。只有成功获取锁的实例才能执行任务,其他实例则需要等待锁释放后再次尝试获取。这样就能确保同一个任务只有一个实例在执行,避免了多个实例重复执行的问题。
2. 数据库乐观锁
除了分布式锁之外,Quartz集裙还可以使用数据库的乐观锁来实现防止多个实例重复执行任务。在数据库中,每一个任务会有一个版本号字段。当任务需要执行时,Quartz集裙的每一个实例都会尝试更新任务的版本号字段。只有成功更新版本号的实例才能执行任务,其他实例则需要放弃执行。通过版本号字段的更新,可以确保同一个任务只有一个实例在执行,从而避免了多个实例重复执行的问题。
3. 心跳检测
除了分布式锁和数据库乐观锁之外,Quartz集裙还可以通过心跳检测的方式来防止多个实例重复执行任务。每一个Quartz实例都会定时向Quartz集裙中的其他实例发送心跳包。当一个实例需要执行任务时,它会先发送一个“我要执行任务”的消息给其他实例。其他实例收到消息后,会立刻知道有一个实例要执行任务,然后放弃自己的执行计划。通过心跳检测,可以确保同一个任务只有一个实例在执行,避免了多个实例重复执行的问题。
总结
Quartz集裙防止多个实例重复执行的原理主要包括分布式锁、数据库乐观锁和心跳检测。通过这些机制,我们可以确保同一个任务只有一个实例在执行,避免了多个实例重复执行的问题。在实际应用中,我们可以根据自己的需求选择合适的机制来避免多个实例重复执行任务,确保任务调度的准确性和高效性。对于Quartz集裙防止多个实例重复执行的原理,我们还可以进一步探讨其在实际应用中的具体实现和优化策略。以下是Quartz集裙防止多个实例重复执行的原理的进一步扩展和实践经验。
trigger定时任务自动触发原理
trigger定时任务自动触发原理
Trigger定时任务自动触发是一种常见的任务调度方式,它通过在预定的时间点触发任务的执行,使得任务能够按照设定的频率、时间间隔或者特定时刻自动执行。在此,我将为您介绍Trigger定时任务自动触发的原理,并以Quartz作为例子进行详细说明。
首先,我们先来了解一下Quartz是什么。Quartz是一个开源的任务调度框架,它提供了丰富的功能和灵活性,可用于管理和调度大规模的定时任务。Quartz主要由四个部分组成:触发器(Trigger)、调度器(Scheduler)、作业(Job)和触发器管理器(TriggerManager)。
触发器是Quartz中的关键概念,它用于触发作业的执行。每个触发器都有一个关联的作业,当触发器触发时,作业将被执行。Quartz提供了多种类型的触发器,包括简单触发器(SimpleTrigger)、日历触发器(CalendarTrigger)和Cron表达式触发器(CronTrigger)等。这些触发器可以根据时间、日期、间隔或者特定条件来触发作业的执行。 调度器是Quartz的核心组件,它用于管理触发器和作业的执行。调度器负责根据触发器的配置和调度规则来触发作业的执行,并提供了丰富的调度功能,如暂停、恢复、删除和修改触发器等。调度器还可以配置成集群模式,以实现高可用性和负载均衡。
作业是需要定时执行的任务,它由开发者编写并实现Job接口中的execute方法。当触发器触发时,调度器会根据配置找到相应的作业,并调用其execute方法执行任务。
触发器管理器是负责管理触发器的组件,它负责触发器的创建、删除和管理等操作。触发器管理器可以根据配置的触发器来触发作业的执行,也可以手动触发作业的执行。
Quartz中的定时任务自动触发原理如下:
1.配置触发器:首先,开发者需要配置触发器的相关参数,包括触发器类型、触发器时间规则和触发器的作业等。这些参数将用于设置触发器的触发条件和作业的执行规则。 2.启动调度器:调度器是Quartz中管理触发器和作业执行的核心组件,开发者需要首先启动调度器。调度器的启动将创建一个线程池,用于执行触发器触发的作业。
quartz cron 表达式判断条件
quartz cron 表达式判断条件
摘要:
1.介绍 quartz cron 表达式
2.quartz cron 表达式的构成
3.判断条件
4.具体示例
正文:
## 1.介绍 quartz cron 表达式
Quartz 是一个流行的开源任务调度框架,它允许用户通过 cron 表达式来定义任务的执行时间。cron 表达式是一种基于 Unix 的定时任务表达式,它可以用来配置任务的执行间隔和执行时间。
## 2.quartz cron 表达式的构成
一个典型的 quartz cron 表达式由以下几个部分组成:
- 分钟(0-59)
- 小时(0-23)
- 天数(1-31)
- 月份(1-12)
- 星期几(0-7,0 表示星期日,1 表示星期一,以此类推)
这些部分之间用空格隔开,构成了一个完整的 cron 表达式。例如,"0/15 * * * *"表示每 15 分钟执行一次。
## 3.判断条件 在 quartz 中,可以通过 cron 表达式来判断任务的执行条件。具体来说,quartz 会比较当前时间和任务的 cron 表达式,如果当前时间符合 cron
表达式,那么任务就会被执行。
## 4.具体示例
假设我们有一个任务,它的执行条件是每小时执行一次,我们可以通过以下 cron 表达式来定义这个任务:
```
0 */1 * * *
```
这个表达式的意思是,每小时的第 0 分钟执行任务。例如,如果当前时间是 10:00,那么这个任务就会在 10:00 执行。如果当前时间是 10:30,那么这个任务就不会执行,因为已经过了每小时的第 0 分钟。
这就是如何使用 quartz cron 表达式来判断任务的执行条件。
Java中定时任务的6种实现方式
Java中定时任务的6种实现⽅式⽬录
1、线程等待实现
2、JDK⾃带Timer实现
2.1 核⼼⽅法
2.2使⽤⽰例
2.2.1指定延迟执⾏⼀次
2.2.2固定间隔执⾏
2.2.3固定速率执⾏
2.3 schedule与scheduleAtFixedRate区别
2.3.1schedule侧重保持间隔时间的稳定
2.3.2scheduleAtFixedRate保持执⾏频率的稳定
2.4 Timer的缺陷
3、JDK⾃带ScheduledExecutorService
3.1 scheduleAtFixedRate⽅法
3.2 scheduleWithFixedDelay⽅法
4、Quartz框架实现
4.1 Quartz集成
5、Spring Task
5.1 fixedDelay和fixedRate的区别
5.2 Spring Task的缺点
6、分布式任务调度
6.1 Quartz分布式
6.2 轻量级神器XXL-Job
6.3 其他框架
7、⼩结
前⾔:
⼏乎在所有的项⽬中,定时任务的使⽤都是不可或缺的,如果使⽤不当甚⾄会造成资损。还记得多年前在做⾦融系
统时,出款业务是通过定时任务对外打款,当时由于银⾏接⼝处理能⼒有限,外加定时任务使⽤不当,导致发出⼤
量重复出款请求。还好在后⾯环节将交易卡在了系统内部,未发⽣资损。
所以,系统的学习⼀下定时任务,是⾮常有必要的。这篇⽂章就带⼤家整体梳理学习⼀下Java领域中常见的⼏种
定时任务实现。
1、线程等待实现
先从最原始最简单的⽅式来讲解。可以先创建⼀个thread,然后让它在while循环⾥⼀直运⾏着,通过sleep⽅法来达到定时任务的
效果。
public class Task {
public static void main(String[] args) {
// run in a second
final long timeInterval = 1000;
Runnable runnable = new Runnable() {
