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注解即可。