Quartz中Job只执行一次 参考:[url]http://zxb1985.iteye.com/blog/1841399[/url]
目的是让前台用户不等待执行完,悄悄地在后台执行: 下面是1秒钟后立即执行,并且只执行一次。
SimpleTrigger simpleTrigger = TriggerBuilder.newTrigger()
.withIdentity("trigger3", "group1")
.startAt(new Date())
.withSchedule(
SimpleScheduleBuilder.simpleSchedule()
.withIntervalInSeconds(3)
.withRepeatCount(0))//重复执行的次数,因为加入任务的时候马上执行了,所以不需要重复,否则会多一次。
.build();
scheduler.scheduleJob(jobDetail, simpleTrigger);
Quartz中Job只执行一次 参考:[url]http://zxb1985.iteye.com/blog/1841399[/url]目的是让前台用户不等待执行完,悄悄地在后台执行: 下面是1秒钟后立即执行,并且只执行一次。[code="java"]SimpleTrigger simpleTrigger = TriggerBuilder.newTrigger() ...
Quartz
是功能强大的开源作业调度库,几乎可以集成到任何
Java
应用程序
中
-从最小的独立应用程序到最大的电子商务系统。
Quartz
可用于创建简单或复杂的计划,以
执行
数以万计,数以万计的工作。任务定义为标准
Java
组件的作业,它们实际上可以
执行
您可以对其
执行
的任何编程操作。
Quartz
Scheduler包含许多企业级功能,例如对JTA事务和集群的支持。
Quartz
是免费使用的,并根据Apache 2.0许可获得许可。
Quartz
作业调度的示例用法:
1、推动流程工作流程:最初下达新订单时,安排一个
Job
在正好2个小时内触发,这将检查该订单的状态,并在尚未收到该订单的订单确认消息时触发警告通知,并将订单状态更改为“等待干预”。
2、系统维护:计划一个工作,以便在每个工作日(除节假日以外的所有工作日)晚上11:30将数据库的内容转储到XML文件
中
。
3、在应用程序内提供提醒服务。
Quartz
特征:
一、运行环境
1、
Quartz
可以嵌入另一个独立应用程序
中
运行
2、
Quartz
可以在应用服务器(或servlet容器)
中
实例化,并参与XA事务
3、
Quartz
可以作为独立程序运行(在其自己的
Java
虚拟机
中
),可以通过RMI使用
4、
Quartz
可以实例化为独立程序的集群(具有负载平衡和故障转移功能),以
执行
作业
二、作业调度
计划在给定触发器发生时运行作业。几乎可以使用以下指令的任意组合来创建触发器:
1、在一天
中
的特定时间(以毫秒为单位)
2、在一周的某些日子
3、在每月的某些天
4、在一年
中
的某些日子
5、不在注册日历
中
列出的某些日期(例如工作日)
6、重复特定的次数
7、重复直到特定的时间/日期
8、无限重复
9、延迟间隔重复
作业由其创建者命名,也可以分为命名组。还可以给触发器指定名称并将其分组,以便在调度程序
中
轻松组织触发器。作业可以
一次
添加到调度程序,但可以通过多个触发器注册。在企业
Java
环境
中
,乔布斯可以将其工作作为分布式(XA)事务的一部分进行。
三、工作
执行
1、
Job
s可以是实现简单
Job
接口的任何
Java
类,为
Job
s可以
执行
的工作留下无限的可能性。
2、作业类实例可以由
Quartz
或由您的应用程序的框架实例化。
3、发生触发器时,调度程序会通知零个或多个实现
Job
Listener和TriggerListener接口的
Java
对象(侦听器可以是简单的
Java
对象,EJB或JMS发布者,等等)。作业
执行
后,也会通知这些侦听器。
4、作业完成后,它们将返回
Job
CompletionCode,以通知调度程序成功或失败。
Job
CompletionCode还可以根据成功/失败代码指示调度程序应采取的任何操作,例如立即重新
执行
Job
。
四、工作持久性
1、
Quartz
的设计包括一个
Job
Store接口,可以实现该接口以提供用于存储作业的各种机制。
2、通过使用随附的JDBC
Job
Store,所有配置为“非易失性”的作业和触发器都将通过JDBC存储在关系数据库
中
。
3、通过使用随附的RAM
Job
Store,所有作业和触发器都存储在RAM
中
,因此不会在程序
执行
之间持久存在-但这具有不需要外部数据库的优点。
五、交易次数
1、
Quartz
可以通过使用
Job
StoreCMT(JDBC
Job
Store的子类)来参与JTA事务。
2、
Quartz
可以在
Job
执行
过程
中
管理JTA事务(开始并提交它们),以便
Job
所
执行
的工作自动在JTA事务
中
进行。
1、故障转移。
2、负载均衡。
3、
Quartz
的内置集群功能依赖于通过JDBC
Job
Store进行数据库持久化(如上所述)。
4、
Quartz
的Terracotta扩展无需群集数据库即可提供群集功能。
七、听众和插件:
1、应用程序可以通过实现一个或多个侦听器接口来捕获调度事件,以监视或控制作业/触发器的行为。
2、可以使用Plug-In机制为
Quartz
添加功能,例如保留作业
执行
的历史记录,或从文件加载作业和触发器定义。
3、
Quartz
附带了许多“工厂内置”的插件和监听器。
项目
中
要求
job
批处理逻辑,仅处理
一次
就行。原本打算使用前端开关触发,但项目组要求改为批处理方式跑批。介于这个批处理的特殊性,不进行周期性触发,仅触发
一次
即可,下面介绍通过配置方式实现项目启动,
quartz
实例化后指定时间进行单次触发。
周期性触发
<!-- 具体
job
类 -->
<bean id="my
Job
Detail" class="org.springframework.scheduling.
quartz
.
Job
DetailFactoryBean"
动态添加、删除、暂停、恢复、更新
JOB
1.除了合法性,必填校验,功能基本都实现。
2.cronExpression 字段 输入
job
执行
的间隔秒,建议2秒
执行
一次
,好测试,看效果。
3.暂停为暂停
JOB
。
4.恢复为恢复暂停的
job
。
5.更新一秒 或者五秒,我写死了,懒得再写页面传值了,知道怎么回事就行了。
6.删除为删除
JOB
。
7.可多
job
一起运行。
如何在SpringBoot项目
中
使得
job
任务只在启动时
执行
一次
?一般都会采用如下2种当时来实现:
1、编写一个类,实现CommandLineRunner,然后覆写run方法,将需要
执行
的代码块放在里面,当项目启动时只会
执行
一次
。
2、在需要
执行
的方法上添加 @PostConstruct注解即可。