【前言】在项目的管理功能中,对定时任务的管理有时会很常见。因为我们不能指望只在配置文件中配置好定时任务就行了,因为如果要控制定时任务的 “暂停” 呢?暂停之后又要在某个时间点 “重启” 该定时任务呢?或者说直接 “删除” 该定时任务呢?要改变某定时任务的触发时间呢? “添加” 一个定时任务对于系统的使用者而言,是不太现实的,因为一个定时任务的处理逻辑他是不可能完成的,还是必须得由开发人员去添加。一般来说,是针对 “已有” 定时任务进行的一些操作,这时候就必须要用到代码来操作了,因为此时通过配置来管控是不太现实的。
版本:Spring4.x + quartz2.x
首先,开发人员会在配置文件中配置一个定时任务(定时任务的实现略……)
<bean id="job1" class="org.test.job.TestJob2" /> <!-- 定义触发器来管理任务bean --> <bean id="cronTriggerJob1" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean" p:cronExpression="0 52 17 * * ? *" > <property name="jobDetail"> <bean class="org.springframework.scheduling.quartz.JobDetailFactoryBean" p:durability="true" p:jobClass="org.test.job.TestJob1" /> </property> </bean> </bean> <!-- 执行实际的调度 --> <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <ref bean="cronTriggerJob1" /> </list> </property> </bean>
我们怎么根据配置的bean来操作该定时任务的管理呢?
需查阅spring4.x结合quartz2.x的底层API,并搞清楚以下概念:
1)Trigger trigger. trigger.getKey()会得到两个东西——group:DEFAULT(默认的group name)、name(triggerName)。其中name对应的就是配置文件中配置的trigger的bean的id(或name)
2)trigger.getJobKey()一样会得到两个东西——group:DEFAULT(默认的group name)、name(jobName)。其中jobName对应的就是配置文件中job的bean的id或name(本例为job1)
注:以上粗体字的部分即为代码管理定时任务的关键之处!
3)如何根据jobName查找到他关联到的trigger呢?
quartz1.x还有这种语法,不过quartz2.x已经废除了:
quartz1.x Trigger trigger = sched.getTrigger(jobName,TRIGGER_GROUP_NAME);
quartz2.x的相关语法(Scheduler类的方法)更为丰富,如下:
public abstract List<? extends Trigger> getTriggersOfJob(JobKey paramJobKey)
throws SchedulerException;
public abstract List<String> getTriggerGroupNames()
throws SchedulerException;
public abstract Set<TriggerKey> getTriggerKeys(GroupMatcher<TriggerKey> paramGroupMatcher)
throws SchedulerException;
public abstract Trigger getTrigger(TriggerKey paramTriggerKey)
throws SchedulerException;
为了改变触发时间,
Trigger trigger = TriggerBuilder.forJob(String jobName).newTrigger()..withSchedule(CronScheduleBuilder.cronSchedule(time))build();
然后再用Scheduler调度类去执行:
schedler.resumeTrigger(trigger.getKey());
根据trigger得到相应的JobDetail:
JobDetail jobDetail = (JobDetail) trigger.getJobDataMap().get("jobDetail");
下面是对定时任务的管理(暂停、重启、删除):
//暂停 //schduler.pauseTrigger(TriggerKey triggerKey) scheduler.pauseJob(JobKey.jobKey("job1"));//停止触发器 Thread.sleep(1000*60*2); //恢复 //scheduler.resumeJob(JobKey jobKey)则可恢复一个具体的job, scheduler.resumeTrigger(TriggerKey.triggerKey("cronTriggerJob1")); Thread.sleep(1000*60*2); //删除 //没有deleteTrigger的方法 scheduler.deleteJob(JobKey.jobKey("job1")); Thread.sleep(1000*60*2); //删除后再次尝试重启(会失效) scheduler.resumeTrigger(TriggerKey.triggerKey("cronTriggerJob1"));
代码经测试,有效,并注意到:
当resume一个定时任务时,会立即执行该定时任务,执行完此次,然后再按原先设定的时间来定期执行;
当删除一个任务后,就算再次resume时,会失效,即并不会被恢复了。
=========================================
Spring bean必须注意的几点:
1)bean的id和name是一回事儿;
2)当一个bean类继承了InitializingBean接口后,必须实现其setBeanName(String name)抽象方法。name一般是bean的id或name属性值,此时bean实例化时方法的顺序为setProperties(String propName)->setBeanName()->afterPropertiesSet();
3)当为了获得一个bean对外提供的接口方法时,必须先获得这个bean的bean对象,通过Spring的SpringContextHolder.getBean(beanId) (其中beanId为bean的id或name属性值)。而不能通过new或者getInstance(获取单例)的方式,否则获取不到该bean的其他属性值!
相关推荐
Quartz提供了API接口和JMX支持,可以获取Job和Trigger的状态,以及进行暂停、恢复、删除等操作。 7. **持久化存储**:Quartz支持多种持久化策略,如内存、数据库等。选择合适的存储方式可以确保在服务器重启后仍能...
下面将详细介绍如何利用Quartz在SpringBoot项目中创建、管理和停止定时任务,并根据业务需求配置cron表达式来设定执行周期。 1. **Quartz简介** - Quartz是Java平台上的一个强大、灵活的作业调度库,它可以与Java...
【数据库管理Quartz定时任务】 在企业级应用中,经常需要执行一些按计划进行的任务,例如数据备份、报表生成、清理过期数据等。Quartz是一个开源的作业调度框架,它允许开发人员定义和调度任务,以便在指定的时间点...
此外,通过数据库,我们可以对定时任务进行动态管理,比如添加、修改或删除任务,而无需重新部署应用。 在提供的"quartz.sql"文件中,很可能是包含了Quartz框架所需的数据库表结构和初始化数据。这些表通常包括以下...
在“quartz定时任务”这个主题中,我们将深入探讨Quartz的核心特性、如何配置和使用它,以及如何实现集群。 1. **Quartz的核心特性** - **灵活的调度**:Quartz支持多种调度模式,如简单触发器、cron触发器和Nth...
以下是对QuartZ定时任务的一些关键知识点的详细说明: 1. **基本概念**: - **Job**:QuartZ中的核心组件,代表一个可执行的任务。 - **Trigger**:触发器,定义了何时执行Job。 - **Scheduler**:调度器,负责...
Quartz.NET是一个开源的作业调度框架,它为.NET应用程序提供了强大的定时任务管理能力。而ABP (Application Blocks for .NET) 框架,尤其是其最新的版本abp vNext,是一个强大的企业级应用开发平台,它简化了开发...
在本案例中,"Quartz.NET定时任务例子源代码(C#)" 提供了一个使用C#语言实现的Quartz.NET应用示例,帮助开发者了解如何在实际项目中运用该库。 首先,`MyQuartz.sln` 是Visual Studio的解决方案文件,包含了整个...
Quartz是一个开源的作业调度框架,它允许开发者创建、组织和执行定时任务。在Java应用中,Quartz常被用来实现复杂的时间调度逻辑,比如定时发送邮件、执行数据同步等。在很多场景下,我们可能需要动态地修改任务的...
Quartz提供了Web管理界面JMX(Java Management Extensions)以及API接口,方便对定时任务进行监控和管理,如查看、暂停、恢复和删除任务。 8. 错误处理与异常策略: 在`execute`方法中,应妥善处理可能的异常情况...
Java Quartz 是一个开源的作业调度框架,用于在Java应用程序中创建和管理定时任务。它提供了丰富的API,使得开发者能够灵活地定义和执行复杂的任务调度。Quartz 的核心特性包括可配置性、可扩展性和高可靠性,使其...
Quartz是一款开源的作业调度框架,它在Java应用程序中用于执行定时任务。这款库以其强大的功能和灵活性而闻名,能够帮助开发者实现复杂的时间调度需求。Quartz的核心是Job(作业)和Trigger(触发器),它们共同协作...
为了实现前端对定时任务的控制,需要设计一套RESTful API接口,如POST /tasks/new 创建任务,DELETE /tasks/{id} 删除任务,PUT /tasks/{id}/update 更新任务,PUT /tasks/{id}/start 启动任务,PUT /tasks/{id}/...
在实际项目中,可能还需要考虑任务的并发控制、异常处理、任务暂停与恢复、任务删除等操作。同时,由于log4j-1.2.14版本较旧,现在一般推荐使用更新的log4j2或者其他现代的日志框架,如Logback,以获取更好的性能和...
Quartz和Spring结合实现动态定时任务是企业级应用中常见的一种技术组合,它允许开发者灵活地定义、管理和执行定时任务。Quartz是一个开源的作业调度框架,而Spring框架则为Java应用程序提供了强大的依赖注入(DI)和...
总之,Spring MVC与Quartz的结合提供了强大且灵活的任务调度能力,通过动态设置时间,你可以根据业务需求轻松地管理定时任务。在实际应用中,可能还需要考虑并发控制、异常处理、日志记录等其他方面,以确保系统的...
在Java开发中,Quartz常被用于创建、调度和执行各种类型的任务,例如定时执行数据备份、发送邮件、执行清理操作等。任务监控管理是任何复杂系统不可或缺的一部分,它可以帮助开发者了解任务的运行状态,优化资源分配...
这个压缩包“quartz动态定时调度完整代码”提供了使用Quartz进行动态任务调度的示例代码和相关资源。 在Quartz中,核心概念包括Scheduler(调度器)、Job(任务)和Trigger(触发器)。Scheduler是整个调度系统的...
相较于Java内置的`Timer`类,Quartz提供了更强大、更灵活的定时任务管理功能,支持集群环境,能够更好地处理并发和资源管理。 在这个"Quartz的简单定时任务小示例"中,我们可以看到如何利用Quartz来创建和执行定时...
Quartz提供了一个Web界面JMX(Java Management Extensions)和API,允许我们监控和管理正在运行的任务,如暂停、恢复、删除任务等。 8. **持久化** 为了保证在系统重启后任务仍然能够按照预定计划运行,Quartz...