`

Quartz立即执行

    博客分类:
  • JAVA
阅读更多

最近项目中使用Quartz来做时间调度,有的时候需要立即执行某个Quartz来测试是否配置正确,故查询了下Quartz的API得到如下方法:

 

 

前置条件是spring中 JobDetailBean  、CronTriggerBean 、ThreadSchedulerFactoryBean 等Bean已经初始化好,

获得了某一个 Scheduler 的实例句柄

 

String [] groupNames = this.scheduler.getJobGroupNames();
				 
	 for(String groupName : groupNames){

		System.out.println( "groupNames = : " + groupName);
					 
		String[] jobNames =this.scheduler.getJobNames(groupName);
					 
		 for(String jobName : jobNames){
				
                        System.out.println("jobNames = : " + jobName);
						
			 this.scheduler.triggerJob(jobName, groupName);
                 }
  
         }
 

 

 

分享到:
评论
2 楼 dikar 2011-10-08  
该用户名已经存在 写道
有两个问题请教,如果该定时任务正在执行,再调用triggerJob(。。。)立即执行这个Job会是什么效果,是暂停了之后重新执行该定时任务呢,还是该方法直接返回,继续执行该定时任务?如果我注册了一个全局监听器监听该Scheduler,triggerJob(。。)方法立即执行该定时任务时我的监听器会监听到吗?谢谢

Hi 你好!

针对你说的问题,我之前没遇到过,然后现在也没有在本地做测试,直接看的源码帮你分析下

QuartzScheduler 查看这类的triggerJob 方法最后2句如下

notifySchedulerThread();
notifySchedulerListenersSchduled(trig);


首先明确下,定时任务如果重复执行或者启动停止,他操作的对象只是调度对象而已,对于当前已经在跑的任务是不会做任何中断行为的,也就是说,不会干扰当前任务线程的运行状态,只是下一次最近的任务调度将会受到影响。

立即执行其实只是将下一次的trigger时间设置为当前时间,这个当前时间是调度器开始遍历trigger的时候的时间,遍历到了就立即执行。

针对已有任务在运行,如果立即运行的话,后续的执行结果分析,这个需要有个前提,就是任务线程是否足够,当任务线程只有一个的话,那立即执行可能因为调度器没有任务线程所以就什么也不做,spring-quartz中默认是10个任务线程,如果你没修改过,那他会和当前任务一起运行,不过这个的运行还和你spring中job的定义相关,你可以看下MethodInvokingJobDetailFactoryBean这个bean,如果你是用这个配置的,那默认有个concurrent配置,默认是true,如果没修改过,那就会一起运行的。

上面一大堆的分析完了,总结下就是你直接用的spring的默认配置的话,立即运行会立即执行一次任务,但是不影响当前已经运行中的任务。

再说下listener的问题,这个我没使用的经验,不过看下源码帮你分析下
  public void notifySchedulerListenersSchduled(Trigger trigger) {
        // build a list of all scheduler listeners that are to be notified...
        List schedListeners = getSchedulerListeners();

看注释,他会把所有的listener都获得然后调用trigger,所以按理是可以监听到的。

我没在本地做测试,如果有问题请指出,谢谢!
1 楼 该用户名已经存在 2011-10-08  
有两个问题请教,如果该定时任务正在执行,再调用triggerJob(。。。)立即执行这个Job会是什么效果,是暂停了之后重新执行该定时任务呢,还是该方法直接返回,继续执行该定时任务?如果我注册了一个全局监听器监听该Scheduler,triggerJob(。。)方法立即执行该定时任务时我的监听器会监听到吗?谢谢

相关推荐

    quartz自动执行一定时

    我们要实现定时执行某个方法时,就可以在job目录中加入自己的方法类,但要实现GCJobInterface接口,重写execute 方法即可

    Quartz调度、终止执行的任务

    Quartz是一款开源的作业调度框架,它允许开发者创建和安排任务执行。在Java应用程序中,Quartz能够帮助我们在特定的时间点或按照预设的周期执行某些功能,如数据收集、日志清理等。当我们需要终止某个正在运行的任务...

    定时器quartz的使用方法

    Quartz是一款广泛应用于Java环境下的开源任务调度框架,它提供了高度灵活的任务调度机制,使得开发者可以轻松地在应用程序中安排任务的执行。本教程将详细讲解如何使用Quartz实现一个简单的定时器功能。 首先,我们...

    Quartz 时间定时执行框架

    Quartz时间定时执行框架是Java领域内一个广泛使用的任务调度框架,它提供了强大的调度功能,使得开发者能够轻松地实现复杂的定时任务。与传统的基于UNIX的CRON表达式相比,Quartz提供了更为灵活和丰富的调度机制,...

    quartz实例

    这个实例可以立即运行,展示了如何在实际应用中配置和使用Quartz。 Quartz的核心概念包括作业(Job)、触发器(Trigger)和调度器(Scheduler)。作业是你要执行的任务,而触发器定义了任务何时运行。调度器则负责...

    quartz-2.4.0-SNAPSHOT-distribution.tar.gz

    这些示例通常涵盖基本的使用场景,如立即执行、定时执行、依赖于其他任务的执行等。 5. **配置文件**:`config`目录可能包含Quartz的默认配置文件,如`quartz.properties`,开发者可以根据需求修改这些配置来定制...

    quartz 1.8.6 API 文档

    Quartz是Java领域的一款强大的开源任务调度框架,它允许开发者创建、管理和执行定时任务。在1.8.6版本的API文档中,包含了丰富的接口和类,为开发人员提供了全面的指南来理解和利用Quartz的功能。 一、核心概念 1....

    Quartz作业调度器

    10. **作业调度策略**:Quartz提供了丰富的调度策略,如立即执行、等待指定时间、按优先级调度等,可以根据具体需求选择合适的策略。 总的来说,Quartz作业调度器是一个强大而灵活的工具,通过与Spring的整合,使得...

    quartz-2.3.0.rar

    例如,你可以设定一个作业每天的特定时间执行,或者在其他作业完成后立即执行。 Quartz还提供了丰富的API和接口,允许开发者自定义触发器策略、作业行为,甚至创建自己的作业和触发器类型。通过这种方式,Quartz...

    springboot2.0整合quartz

    Spring Boot简化了Spring应用程序的配置和启动过程,而Quartz则是一个强大的作业调度框架,用于执行定时任务。本篇文章将详细探讨如何在Spring Boot 2.0项目中整合Quartz,以及这种方式的优势。 首先,让我们了解...

    QuartzAPI中文chm

    - **调度策略**:如何设置调度策略,例如立即执行、延迟执行、周期执行等。 - **调度器操作**:如何启动、暂停、恢复和关闭Scheduler,以及管理已有的Job和Trigger。 - **监听器和插件**:介绍如何使用...

    一个java Quartz的小例子

    Java Quartz 是一个强大的开源作业调度框架,用于在Java应用程序中创建和管理计划任务。它允许开发者精确地安排任务执行,可以...在实际项目中,Quartz可以用于执行定时数据同步、报表生成、邮件发送等各种周期性任务。

    quartz作业调度测试

    Quartz提供了异常处理机制,可以设置重新尝试的策略,例如在失败后立即重试,或者等待一段时间后再试。 9. **持久化**: 为了在应用重启后仍能保持作业计划,Quartz支持将Job和Trigger存储在数据库中。这样,即使...

    servlet整合quartz2所需quartz2包

    7. **处理Servlet请求**:在Servlet中,可以创建一个端点来触发任务的立即执行,或者更新任务的配置。 整合完成后,Quartz2会根据定义的Trigger自动执行Job,使得Web应用具备定时执行任务的能力,这对于诸如数据...

    作业调度Quartz.net源代码

    例如,你可以创建一个简单触发器让作业立即执行并每隔一段时间重复,或者使用日历触发器指定特定日期和时间执行。触发器与作业通过JobDataMap关联,可以在触发时传递参数给作业。 3. **调度器(Scheduler)**:调度...

    quartz动态从数据库获取时间定时改进

    同时,为了实现任务的动态更新,我们需要监听数据库的变化,一旦有任务信息更新,立即同步到Quartz。这可以通过监听数据库的触发器事件,或者使用轮询机制来实现。 在“quartz动态配置.docx”文档中,可能详细描述...

    quartz-1.8.4 定时调度

    - 创建Trigger:根据需求创建Trigger,设置触发规则,如立即执行、定时执行或按照cron表达式执行。 - 注册Job和Trigger:将JobDetail和Trigger添加到Scheduler中,进行关联。 - 启动Scheduler:调用`Scheduler....

    quartz helloworld例子

    Quartz 是一个开源的作业调度框架,常用于Java应用程序中,用于执行定时任务。这个"quartz helloworld例子"很可能是展示如何在Java项目中配置和使用Quartz库的一个简单教程。下面,我们将深入探讨Quartz的核心概念和...

    Spring Quartz 动态暂停、恢复、修改定时任务

    Spring Quartz 动态暂停、恢复、修改定时任务的一个demo,使用maven构建,框架采用spring springmvc jpa,数据库mysql,含数据库脚本,运行可用,页面访问地址http://localhost:8080/quartz_demo/quartz/list

    quartz框架demo,适用于初学者

    - 主函数,通常是`main`方法,直接运行此程序可以立即查看到Quartz框架的工作效果。 这个demo对于初学者来说非常有价值,因为它提供了直观的示例,帮助理解Quartz的运作机制。通过实践这个demo,你可以学会如何在...

Global site tag (gtag.js) - Google Analytics