Quartz高级部分JobStore

JobStore是用来保存你的工作数据的.永远不要在你的代码中使用
JobStore,它都是通过属性文件来配置的.

下面我们做一个RAMJobStore的 例子.

建一个job:

package  com;

import  org.apache.commons.logging.Log;
import  org.apache.commons.logging.LogFactory;
import  org.quartz.Job;
import  org.quartz.JobExecutionContext;
import  org.quartz.JobExecutionException;

public   class  PropJob  implements  Job
{
    
private static final Log log = LogFactory.getLog(PropJob.class);
    
    
    
public void execute(JobExecutionContext context) throws JobExecutionException
    
{
        System.out.println(
"begin:::::");
        log.info(
"job is begin:" + context.getTrigger().getName());
    }


}

测试类:

package  com;

import  java.util.Calendar;

import  org.quartz.JobDetail;
import  org.quartz.Scheduler;
import  org.quartz.SchedulerFactory;
import  org.quartz.SimpleTrigger;
import  org.quartz.impl.StdSchedulerFactory;

public   class  PriorityDemo
{
    
public void run() throws Exception
    
{
        
// 从属性文件中读取工程池信息
        SchedulerFactory sf = new StdSchedulerFactory(
                
"src/com/quartz.properties");
        Scheduler scheduler 
= sf.getScheduler();
        JobDetail job 
= new JobDetail("propJob"null, PropJob.class);
        Calendar startTime 
= Calendar.getInstance();
        
// 在当前时间上加5秒
        startTime.add(Calendar.SECOND, 5);
        
/** *//**
         * String name, String group, String jobName, String jobGroup, Date
         * startTime, Date endTime, int repeatCount, long repeatInterval
         
*/

        
// 每5秒一次
        SimpleTrigger trigger1 = new SimpleTrigger("trigger1"null, startTime
                .getTime(), 
null15L * 1000L);
        trigger1.setPriority(
-5);
        trigger1.setJobName(
"propJob");
        
// 每10秒一次
        SimpleTrigger trigger2 = new SimpleTrigger("trigger2"null, startTime
                .getTime(), 
null110L * 1000L);
        trigger2.setJobName(
"propJob");
        
// 每15秒一次
        SimpleTrigger trigger3 = new SimpleTrigger("trigger3"null, startTime
                .getTime(), 
null115L * 1000L);
        trigger3.setPriority(
10);
        trigger3.setJobName(
"propJob");
        
// 安排工作计划
        scheduler.scheduleJob(job, trigger1);
        scheduler.scheduleJob(trigger2);
        scheduler.scheduleJob(trigger3);
        
// 任务开始
        scheduler.start();
        
// 休息30秒
        Thread.sleep(30L * 1000L);
        
// 关闭
        scheduler.shutdown();
    }


    
public static void main(String[] args)
    
{
        PriorityDemo priorityDemo 
= new PriorityDemo();
        
try
        
{
            priorityDemo.run();
        }
 catch (Exception e)
        
{
            e.printStackTrace();
        }

    }


}


输出结果:
2008 - 5 - 9   10 : 45 : 13  org.quartz.core.SchedulerSignalerImpl <init>
信息: Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl
2008 - 5 - 9   10 : 45 : 13  org.quartz.core.QuartzScheduler <init>
信息: Quartz Scheduler v
.1.6.1 -RC1 created.
2008 - 5 - 9   10 : 45 : 13  org.quartz.simpl.RAMJobStore initialize
信息: RAMJobStore initialized.
2008 - 5 - 9   10 : 45 : 13  org.quartz.impl.StdSchedulerFactory instantiate
信息: Quartz scheduler 'PriorityDemoScheduler' initialized from the specified file : 'src/com/quartz.properties'
2008 - 5 - 9   10 : 45 : 13  org.quartz.impl.StdSchedulerFactory instantiate
信息: Quartz scheduler version: 
1.6.1 -RC1
2008 - 5 - 9   10 : 45 : 13  org.quartz.core.QuartzScheduler start
信息: Scheduler PriorityDemoScheduler_$_NON_CLUSTERED started.
2008 - 5 - 9   10 : 45 : 18  com.PropJob execute
信息: job is begin:trigger3
2008 - 5 - 9   10 : 45 : 18  com.PropJob execute
信息: job is begin:trigger2
2008 - 5 - 9   10 : 45 : 18  com.PropJob execute
信息: job is begin:trigger1
begin:::::
begin:::::
begin:::::
2008 - 5 - 9   10 : 45 : 23  com.PropJob execute
信息: job is begin:trigger1
begin:::::
2008 - 5 - 9   10 : 45 : 28  com.PropJob execute
信息: job is begin:trigger2
begin:::::
begin:::::
2008 - 5 - 9   10 : 45 : 33  com.PropJob execute
信息: job is begin:trigger3
2008 - 5 - 9   10 : 45 : 43  org.quartz.core.QuartzScheduler shutdown
信息: Scheduler PriorityDemoScheduler_$_NON_CLUSTERED shutting down.
2008 - 5 - 9   10 : 45 : 43  org.quartz.core.QuartzScheduler standby
信息: Scheduler PriorityDemoScheduler_$_NON_CLUSTERED paused.
2008 - 5 - 9   10 : 45 : 43  org.quartz.core.QuartzScheduler shutdown
信息: Scheduler PriorityDemoScheduler_$_NON_CLUSTERED shutdown complete.


我们的属性文件已经被正确读取.
有人可能会对
org.quartz.scheduler.instanceName = PriorityExampleScheduler
产生疑问,PriorityDemoScheduler这个类是不存在的,
其实你只要在你的job类后面加上Scheduler就可以了. 199438.html

々上善若水々 2008-05-09 10:51 发表评论
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`org.quartz.jobStore.misfireThreshold: 60000` 是 Quartz 调度器框架中用于配置作业(Job)的超时时间阈值属性。在这个例子中,它将作业的超时时间阈值设置为 60000 毫秒(即 60 秒)。 在 Quartz 调度器中,当一个作业错过了它原本应该触发的时间点,我们称之为 "misfire"(错过触发)。Quartz 提供了不同的策略来处理 misfire 的情况,而超时时间阈值就是其中之一。 超时时间阈值指定了一个时间范围,在该范围内的 misfire 会被 Quartz 视为可接受的,不会立即触发对应的作业执行。只有当 misfire 的时间超过这个阈值时,Quartz 才会将其视为严重的 misfire,并立即触发作业的执行。 在这个例子中,将作业的超时时间阈值设置为 60000 毫秒,即 60 秒。这意味着,如果一个作业错过了触发时间,并且 misfire 的时间小于等于 60 秒,Quartz 会将其视为可接受的,并在下一次调度时尽快执行作业。只有当 misfire 的时间超过了 60 秒,Quartz 才会立即触发作业的执行。 设置超时时间阈值的目的是为了控制 misfire 的处理方式,避免过于频繁地触发作业的执行,同时确保及时处理严重的 misfire 情况。具体的阈值设置需要根据具体的需求和应用场景进行调整。 需要注意的是,超时时间阈值的设置可能会受到其他配置和策略的影响,如作业调度间隔、作业优先级等。因此,在设置超时时间阈值时,需要综合考虑其他因素,并根据实际情况进行调整。 这里提到的配置是基于使用 Quartz 调度器框架的应用程序。如果使用其他调度器或框架,配置方式和属性名称可能会有所不同。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值