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

Quartz遇到的一个问题总结

阅读更多
由于客户需要尽快的看到项目原型,自己在两天内使用Quartz+Struts2,使用XML文件做持久化,搭建了一个Demo的项目工程。
功能的主要是希望能够通过界面化对Job进行CRUD操作之外,以及控制Job的启动、停止以及Job的删除操作,至于CRUD操作,主要就是通过对XML文件使用Dom4j进行解析,在有就是拼接等操作。对于Job的控制操作,需要了解下Quartz,把自己看过研究些的资料说下,在把遇到的问题说下。
JobDetail是用来包装Job实例的具体细节的。Job以class的方式传入JobDetail,quartz会自动实例化Job类的。同时需要规定job的name和group,在jobdetail的validate()下,一个job是必须有name和group属性,并且二者组合标示唯一的job。JobDetail中的一些重要数据存放在JobDataMap中,这个map可以用来在控制程序和job内传递需要传递的参数。
    JobDetail还有三个重要的boolean值的属性,分别是durability、volatility、shouldRecover。这三个属性默认是false,主要在数据库操作的时候起作用。
    Trigger时间调度
    相对于job,trigger简单一些。所谓的时间调度,就是设置job执行的时间表。Trigger主要分为SimpleTrigger和CronTrigger两大类。前者主要是以1/1000
为单位的简单时间,可是设置startTime、endTime、repeatCount、repeatInterval等主要参数。CronTrigger的详细用法参看quartz文档的的CronTriggers Tutorial。
    scheduler.schedulerJob(jobDetail, trigger);将JobDetail和对应的Trigger部署到scheduler中,然后根据trigger的定义,自动执行指定job。
    Calendar这个类用来标识出特殊的时间,scheduler根据trigger执行job的时候,如果遇到这些标识出的特殊时间则不执行job。Calendar具体的接口有BaseCalendar、AnnualCalendar、HolidayCalendar、MonthlyCalendar、WeeklyCalendar等等。calendar的具体用法参看quartz的文档。
    Misfire Instruction....设定当trigger错过了触发时刻的时候需要采取的处理策略
    TriggerUtils相当于一个trigger factory,方便我们取得特殊trigger的实例,而不用自己去构造。
关于Quartz的多线程方面可以参考文章http://liuwei-git-com-cn.iteye.com/blog/332787
注意一点的是Quartz中的实例例如HelloWorld实例:
1. HelloJob 接口
public class HelloJob implements Job{

private static Log logger = LogFactory.getLog(HelloJob.class);
@Override
public void execute(JobExecutionContext arg0) throws JobExecutionException {
// TODO Auto-generated method stub
logger.info("Hello World ");
System.out.println("Hello World");
}
2 HelloScheduler类
public class HelloScheduler {

public void run() throws Exception{
Log logger=LogFactory.getLog(HelloScheduler.class);

logger.info("Hello Schduler init***");
System.out.println("Hello Schduler init***");
        SchedulerFactory sf = new StdSchedulerFactory();
        Scheduler sched = sf.getScheduler();
        if(sched.isShutdown()){
        System.out.println("调度已经停止**");
        sched.start();
        }
        logger.info("Hello Schduler init end ***");
        System.out.println("Hello Schduler init end ***");
     // computer a time that is on the next round minute
        Date runTime = TriggerUtils.getEvenMinuteDate(new Date());
     // define the job and tie it to our HelloJob class
        JobDetail helloJob = new JobDetail("helloJob", "helloGroup", HelloJob.class);
        // Trigger the job to run on the next round minute
        SimpleTrigger trigger =
            new SimpleTrigger("helloTrigger", "helloGroup", runTime);
       
        sched.scheduleJob(helloJob, trigger); //对应触发器触发的Job
        System.out.println(helloJob.getFullName() + " will run at: " + runTime);
        logger.info(helloJob.getFullName() + " will run at: " + runTime); 
        // Start up the scheduler (nothing can actually run until the
        // scheduler has been started)
        sched.start();
        logger.info("------- Started Scheduler -----------------");
       
     // wait long enough so that the scheduler as an opportunity to
        // run the job!
        logger.info("------- Waiting 90 seconds... -------------");
        try {
            // wait 90 seconds to show jobs
            Thread.sleep(90L * 1000L);
            // executing...
        } catch (Exception e) {
        }

        // shut down the scheduler
        logger.info("------- Shutting Down ---------------------");
        //sched.shutdown(true);
        logger.info("------- Shutdown Complete -----------------");
}
    public static void main(String[] args) throws Exception {

        HelloScheduler helloExample = new HelloScheduler();
        helloExample.run();

    }
}
这个运行没问题,但是如果通过在Web项目中,通过使用getScheduler()方法获取Schedule对象,会抛出异常,所以需要通过工厂在调用之前创建几个Schedule即可。
DirectSchedulerFactory factory=DirectSchedulerFactory.getInstance();  
factory.createVolatileScheduler(10);
Scheduler sche=factory.getScheduler();
我在做Web项目时,按照给的实例直接获得造成了异常,这样解决就可以了
0
0
分享到:
评论

相关推荐

    quartz一个定时触发实例

    quartz一个定时触发实例

    quartz指南,Quartz 工程

    文件里面包括 1:Quartz开发指南.pdf 2:Quartz从入门到进阶.pdf 3:QuartzBeginnerExample一个附带的工程例子 4:quartz-1.6.1.zip Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它...

    Quartz的一个简单实例

    Quartz的一个简单实例 ...................

    Quartz一个开源作业调度框架

    Quartz是一个开源的作业调度框架,一些研究和说明

    spring整合quartz常见问题

    spring整合quartz常见问题

    quartz内部表.sql

    quartz内部表.sql。

    一个基础的Quartz定时器案例

    博客中《quartz学习笔记二:一个基础的Quartz定时器案例》的项目代码,包含jar包,只要导入即可运行。这是一个最基本的Quartz定时器API版。

    quartz简单实例quartz简单实例

    quartz简单实例quartz简单实例quartz简单实例quartz简单实例

    quartz 随tomcat启动执行一次

    tomcat启动时立即调用quartz执行一次

    Quartz.NET-2.0

    只需实现Quartz.IJob接口,IJob接口包含唯一的一个方法Execute(),作业从这里开始执行。一旦实现了IJob接口和Execute ()方法,当Quartz.NET确定该是作业运行的时候,它将调用作业。Execute()方法内就是要做的事情。

    自开发实现Quartz Web管理工具

    网上能找到的Quartz Web管理的资料都是使用的一个国外人写的Quartz WebApp的东东,功能也很全面。但是作为自己的应用其实用不了那么多功能,一般我们只要可以定义一个job,指定一个Cron表达式完成工作即可,附带的...

    一个最简单的quartz案例

    博客中《quartz学习笔记一:一个最简单的quartz案例》的项目代码,包含jar包,只要导入即可运行。这是一个最基本的Quartz定时器HelloWorld版。

    一个java Quartz的小例子

    关于java Quartz的小例子 关于java Quartz的小例子

    quartz-1.6.0.jar和quartz-all-1.6.0.jar

    该压缩包内包含两个quartz的jar包, 分别是quartz-1.6.0.jar和quartz-all-1.6.0.jar

    关于spring中quartz的配置

    关于spring中quartz的配置

    quartz1.5,quartz1.6,quartz1.8

    Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的日程序表

    QuartzAPI以及例子

    如果这些问题中任何一个你回答是,那么你应该使用Quartz.NET调度器。 Quartz.NET允许开发人员根据时间间隔(或天)来调度作业。它实现了作业和触发器的多对多关系,还能把多个作业与不同的触发器关联。整合了 Quartz...

    quartz-2.3.2-API文档-中文版.zip

    赠送jar包:quartz-2.3.2.jar; 赠送原API文档:quartz-2.3.2-javadoc.jar; 赠送源代码:quartz-2.3.2-sources.jar; 赠送Maven依赖信息文件:quartz-2.3.2.pom; 包含翻译后的API文档:quartz-2.3.2-javadoc-API...

    quartz-2.1.1 完整源码

    Quartz是一个开源的作业调度框架,它完全由Java写成,并设计用于J2SE和J2EE应用中。它提供了巨大的灵 活性而不牺牲简单性。你能够用它来为执行一个作业而创建简单的或复杂的调度 What's New In Quartz Scheduler ...

    Quartz-2.0.2 CSDN下载

    Quartz框架的核心是调度器。调度器负责管理Quartz应用运行时环境。调度器不是靠自己做所有的工作,而是依赖框架...这就是Quartz怎样能并发运行多个作业的原理。 Quartz依赖一套松耦合的线程池管理部件来管 理线程环境。

Global site tag (gtag.js) - Google Analytics