`
heymaomao
  • 浏览: 4297 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

quartz 一个JobDetail 如何设置多个触发器

 
阅读更多
http://www.iteye.com/problems/47143
     	
                  JobDetail jobDetail = new JobDetail(jobName, jobGroupName, class1.getClass());
                	Trigger trigger3 =TriggerUtils.makeMinutelyTrigger("trigger2", 10, SimpleTrigger.REPEAT_INDEFINITELY);
                	Trigger trigger4 =TriggerUtils.makeSecondlyTrigger("trigger1",5000, SimpleTrigger.REPEAT_INDEFINITELY);
                	scheduler.scheduleJob(jobDetail, trigger3);
                	[color=red]scheduler.scheduleJob(jobDetail, trigger4);[/color]                

红色处报异常了。。。
Unable to store Job with name: '1000000000' and group: 'jobDetailGroup2', because one already exists with this identification. 
org.quartz.ObjectAlreadyExistsException: Unable to store Job with name: '1000000000' and group: 'jobDetailGroup2', because one already exists with this identification. 
at org.quartz.impl.jdbcjobstore.JobStoreSupport.storeJob(JobStoreSupport.java:1098) 
at org.quartz.impl.jdbcjobstore.JobStoreSupport$3.execute(JobStoreSupport.java:1047) 
at org.quartz.impl.jdbcjobstore.JobStoreSupport$40.execute(JobStoreSupport.java:3675) 
at org.quartz.impl.jdbcjobstore.JobStoreSupport.executeInNonManagedTXLock(JobStoreSupport.java:3747)
at org.quartz.impl.jdbcjobstore.JobStoreTX.executeInLock(JobStoreTX.java:93) 
at org.quartz.impl.jdbcjobstore.JobStoreSupport.executeInLock(JobStoreSupport.java:3671) 
at org.quartz.impl.jdbcjobstore.JobStoreSupport.storeJobAndTrigger(JobStoreSupport.java:1035) 
at org.quartz.core.QuartzScheduler.scheduleJob(QuartzScheduler.java:732) 
at org.quartz.impl.StdScheduler.scheduleJob(StdScheduler.java:265) 
at com.congxing.bi.modules.alarmwarning.quartz.SimpleScheduler.registDataJobToScheduler(SimpleScheduler.java:126)
at Test.main(Test.java:17) 

A1
    JobDetail jobDetail = new JobDetail(jobName, jobGroup, class1.getClass());

    // durable, 指明任务就算没有绑定Trigger仍保留在Quartz的JobStore中,
    jobDetail.setDurable(true);

    // 加入一个任务到Quartz框架中, 等待后面再绑定Trigger,
    // 此接口中的JobDetail的durable必须为true
    scheduler.addJob(jobDetail, false);

    Trigger trigger3 = TriggerUtils.makeMinutelyTrigger("trigger2", 10, SimpleTrigger.REPEAT_INDEFINITELY);

    // 使用scheduleJob(Trigger)加入的Trigger必须指明JobName与JobGroup
    trigger3.setJobName(jobName);
    trigger3.setJobGroup(jobGroup);
    scheduler.scheduleJob(trigger3); // 看这里

    Trigger trigger4 = TriggerUtils.makeSecondlyTrigger("trigger1", 5000, SimpleTrigger.REPEAT_INDEFINITELY);
    trigger4.setJobName(jobName);
    trigger4.setJobGroup(jobGroup);
    scheduler.scheduleJob(trigger4); // 看这里

A2
    JobDetail jobDetail = new JobDetail(jobName, jobGroup, class1.getClass());
    Trigger trigger3 = TriggerUtils.makeMinutelyTrigger("trigger2", 10, SimpleTrigger.REPEAT_INDEFINITELY);
    Trigger trigger4 = TriggerUtils.makeSecondlyTrigger("trigger1", 5000, SimpleTrigger.REPEAT_INDEFINITELY);

    // 下面这个接口其实可以理解为先addJob(JobDetail, false)
    // 再调用scheduleJob(Trigger), 此时Quartz会自动校正与设置trigger3的JobName与JobGroup属性
    scheduler.scheduleJob(jobDetail, trigger3);

    // 因为任务已在上一条语句中已加入, 所以不能再使用scheduleJob(JobDetail, Trigger)
    trigger4.setJobName(jobName);
    trigger4.setJobGroup(jobGroup);
    scheduler.scheduleJob(trigger4); // 看这里

总结:
    每个任务JobDetail可以绑定多个Trigger,但一个Trigger只能绑定一个任务,这种绑定关系由四种接口来执行:
  • 1,
  • Java代码  收藏代码
    Scheduler#scheduleJob(JobDetail, Trigger) 

        该接口的作用是在将任务加入Quartz的同时绑定一个Trigger,Quartz会在加入该任务后自动设置Trigger的JobName与JobGroup为该JobDetail的name与group;
  • 2,
  • Java代码  收藏代码
    Scheduler#scheduleJob(Trigger) 

        该接口的作用是将该Trigger绑定到其JobName与JobGroup指向的任务JobDetail。这时的name与group需要在Trigger绑定前由Quartz的使用者来设置与调用
  • 3,
  • Java代码  收藏代码
    Scheduler#rescheduleJob(String, String, Trigger) 

        替换一个指定的Trigger, 即解除指定Trigger与任务的绑定,并将新的Trigger与任务绑定,Quartz会自动调整新Trigger的JobName与JobGroup,而旧的Trigger将被移除
  • 4,
  • Java代码  收藏代码
    Scheduler#triggerJob(String, String) 
    系列
        创建一个立即触发的Trigger,并将其与name与group指定的任务绑定


    JobDetail有个属性叫durable,表明该任务没有任何trigger绑定时仍保存在Quartz的JobStore中,默认为false。
    若JobDetail的durable属性为false,则任务将会从Quartz移除。
分享到:
评论

相关推荐

    Quartz触发器的使用DEMO(Spring实现)

    3. **定义Job**:创建一个实现了`org.quartz.Job`接口的类,该类定义了Job的具体业务逻辑。例如: ```java public class MyJob implements Job { @Override public void execute(JobExecutionContext context) ...

    spring多个定时任务quartz配置

    Quartz是一个开源的工作调度框架,它允许应用程序定义作业(Jobs)和触发器(Triggers),以在指定的时间执行特定的业务逻辑。作业是执行的任务,而触发器则是控制作业何时运行的规则。 1. **引入依赖**:在项目中...

    quartz一个定时触发实例

    7. **集群支持**:Quartz可以部署在集群环境中,多个调度器实例可以共享相同的作业和触发器,确保高可用性和负载均衡。 8. **API和配置**:Quartz提供丰富的API和XML配置文件,可以灵活地设置任务执行的细节,如...

    定时任务quartz实现分组串行并行动态配置

    3. **串行执行**:如果希望同一组内的Job按顺序执行,可以使用`CalendarIntervalTrigger`或`SimpleTrigger`,并通过设置相关属性,确保前一个Job完成后再启动下一个。此外,还可以自定义Trigger监听器,检查当前运行...

    转:spring多个定时任务quartz配置

    3. **创建Job类**:Quartz中的任务由`Job`接口实现,你需要定义一个或多个实现了`org.quartz.Job`接口的类,每个类代表一个具体的任务。 4. **定义Trigger**:`Trigger`是决定任务何时运行的规则,可以是...

    Quartz的一个简单实例

    // 创建一个触发器,并命名为 ‘trigger1’,将此触发器设置在 ‘job1’ 上 SimpleTrigger simpleTrigger = new SimpleTrigger("trigger1", "job1", new Date(ts), null, -1, 1000L); // 将 ‘job1’ 加入调度...

    Quartz使用详解

    比如一个任务可以和多个触发器关联,可以更改或替换一个触发器,而不必重新定义任务。现在,使用 JobDetail 类来传递数据,而不是通过 get/set 方法传递数据。 六、实践示例 下面是一个使用 Quartz 实践示例: ```...

    java定时执行多任务和quartz定时执行多任务

    - 高度可配置:Quartz允许你设置多个JobDetail和Trigger,甚至可以为同一个Job设置多个Trigger。 - 灵活的调度:支持CRON表达式,可以轻松实现复杂的定时策略。 - 高可用性:Quartz支持集群,可以在多个节点上...

    Quartz简介ppt(原创)

    Quartz支持作业和触发器的多对多关系,这意味着多个作业可以与不同的触发器关联,同时,同一个作业也能被多个触发器触发,从而实现了资源的最大化利用和灵活性。 三、核心概念:作业与触发器 在Quartz中,作业是可...

    深入解读Quartz的原理

    一个 `Scheduler` 可以管理多个 `JobDetail` 和 `Trigger`,并且可以配置为单例模式运行或者集群模式运行。 #### 三、Quartz 的工作流程 1. **创建 JobDetail**:首先,你需要定义一个实现了 `Job` 接口的类,然后...

    quartz实例,quartz入门例子

    3. **并发控制**:了解如何设置Job的并发策略,比如是否允许多个实例同时运行。 4. **Job状态管理**:理解Job的状态(如PAUSED、WAITING等)及其对调度的影响。 5. **错误处理**:学习如何捕获和处理Job执行过程中的...

    Quartz之Job与JobDetail深入解析

    Quartz是一个任务调度框架,能够根据特定的触发条件来执行某个任务。Quartz的核心组件包括Scheduler、Trigger、JobDetail和Job。 Scheduler Scheduler是Quartz的核心组件,负责调度所有的任务。Scheduler包含两个...

    Quartz一个开源的作业调度框架

    Quartz是一个广泛应用于企业级应用中的开源作业调度框架,它为开发者提供了强大的任务调度功能,使得应用程序能够在预定的时间执行特定的任务。Quartz的核心设计目标是简单易用且可高度扩展,能够满足从小型项目到...

    Quartz 定时任务依赖包 jar包

    例如,你可以创建一个JobDetail,表示一个发送邮件的任务,然后创建一个CronTrigger,使其在每个工作日的9点执行。 总的来说,Quartz是一个强大且灵活的定时任务解决方案,适合在各种Java应用程序中使用。通过深入...

    quartz-2.2.1.jar

    然后,创建一个`JobDetail`实例,设置作业的名称、组名和作业类。接着,创建触发器,如CronTrigger,指定执行时间规则。 2. 注册作业和触发器:使用`Scheduler`实例注册作业和触发器。`scheduler.scheduleJob...

    C# QuartzDemo

    这个接口只有一个方法`Execute(JobExecutionContext context)`,当触发器触发时,Quartz会调用这个方法来执行任务。在C# QuartzDemo中,可能有两个不同的Job类,分别代表两个不同的任务。 2. **Trigger**: 触发器...

    Quartz--JAVA定时任务\Java应用:Java调度任务和Spring Quartz (1)

    Quartz还支持集群和持久化,这意味着多个Quartz实例可以在分布式环境中协作调度任务,而且任务的状态和计划可以存储在数据库中,保证了高可用性和容错性。通过Spring与Quartz的整合,可以轻松地在Spring应用中管理...

    quartz-2.2.0.jar.zip

    3. **集群支持**:Quartz可以配置在多台服务器上运行,形成一个集群。当一台服务器宕机时,其他服务器可以接管调度任务,确保高可用性。 4. **插件支持**:Quartz提供了一系列插件,如邮件通知插件,可以在任务完成...

    Quartz作业调度器

    你可以为同一个作业定义多个触发器,或者为一个触发器关联多个作业。此外,Quartz还支持集群,可以在多台服务器上分布式调度,保证高可用性和容错性。 通过下载提供的压缩包文件,你将能够看到Spring整合Quartz的...

    spring多个定时任务quartz配置 easy518网址导航

    根据提供的信息,我们可以详细解析如何在Spring框架中配置多个基于Quartz的定时任务。Quartz是一个功能强大的开源作业调度库,它可以被应用到Java应用程序中实现复杂调度的需求。本篇文章将深入探讨如何在Spring环境...

Global site tag (gtag.js) - Google Analytics