`
handonghandong
  • 浏览: 89041 次
  • 性别: 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
分享到:
评论

相关推荐

    spring整合quartz常见问题

    在使用Quartz集群功能时,可能会遇到这样的警告:“这个调度器实例(实例名)仍然活跃,但是已经被集群中的另一个实例恢复。”这种警告可能表明集群中的实例之间存在时间同步问题。 **解决方案**: - **检查时钟同步...

    quartz 调用两次任务

    在“quartz 调用两次任务”这个问题中,我们可能遇到了一个常见问题,即同一个 Quartz 任务被错误地触发执行了两次。 在 Quartz 中,任务(Job)是通过实现 `org.quartz.Job` 接口的类来创建的,而调度则是通过 `...

    QuartzDemo及iis闲置时间解决方案

    总结起来,Quartz和IIS结合使用时,可能会遇到IIS闲置时间导致任务中断的问题。通过调整IIS设置、优化Quartz配置,甚至将任务调度服务迁移出IIS,我们可以确保定时任务的稳定运行。在实际应用中,应根据具体需求和...

    Quartz

    Quartz是一个完全由Java编写的开源作业调度框架,适用于多种Java应用程序环境,包括但不限于J2SE、Web应用以及J2EE应用服务器。它提供了一种简单而灵活的方式来定义、调度和管理各种定时任务。 #### 二、Quartz的...

    quartz实现动态任务定时调度

    总结来说,Quartz 提供了一个强大且灵活的定时任务调度解决方案,它允许你动态地管理任务和调度。通过配置数据库持久化,你可以方便地查看和修改任务设置。虽然在特定的 cron 表达式问题上遇到了挑战,但通常 Quartz...

    Quartz+spring定时任务demo

    总结来说,"Quartz+spring定时任务demo" 提供了一个集成 Quartz 与 Spring 的实例,帮助开发者快速理解和使用这种组合来创建和管理定时任务。这不仅简化了任务的编写,还充分利用了 Spring 的优点,提高了代码的可...

    Quartz框架快速入门

    Quartz是一个开源的作业调度框架,用于开发Java应用程序。它提供了强大的触发器(Trigger)机制用于关联作业(Job),同时还具备灵活的表达式用于配置定时任务。Quartz能够集成到任何Java应用中,无论是独立的或已...

    Programming with Quartz 2D and PDF Graphics in MacOS

    Quartz 2D是苹果公司为MacOS开发的一个高性能、功能丰富的2D图形处理框架。它不仅适用于MacOS平台,也被广泛应用于iOS设备上。Quartz 2D提供了一系列强大的API,支持高级图像处理任务,如路径绘制、图像渲染、PDF...

    定时器quartZ

    总结起来,Quartz是一个强大的定时任务框架,广泛应用于Java开发中。通过源码学习,开发者可以深入理解其内部机制,并根据需求进行定制。结合像EfficientPIM这样的工具,Quartz可以实现在日常生活中或企业环境中的...

    Quartz 开发指南 中文版

    - **Quartz 是什么**:Quartz 是一个任务日程管理系统,用于调度和管理定时任务。 - **为什么不使用 java.util.Timer**:相比于 `java.util.Timer`,Quartz 提供了更强大的调度功能、集群支持以及事务处理能力。 ...

    Quartz和Spring整合

    Quartz和Spring整合是企业级应用中常见的任务调度解决方案,Quartz是一个开源的作业调度框架,而Spring则是Java领域广泛使用的轻量级框架。这两者的整合使得开发者可以在Spring管理的bean中灵活地定义和执行定时任务...

    Quartz 框架快速入门

    Quartz 是一个功能强大的开源作业调度框架,它可以定义定时任务并管理这些任务的触发逻辑。该框架支持复杂的循环规则,并且可以集成到任何 Java 应用程序中,无论是独立运行还是部署在应用服务器中。 #### 二、搭建...

    Quartz任务调度快速入门

    - **作用**:由于Quartz在每次执行任务时都会重新创建一个 `Job` 实例,因此它不能直接接收一个 `Job` 的实例,而是需要一个类来描述 `Job` 的实现类及其相关静态信息,如任务的名字、描述、关联的监听器等。...

    Quartz 定时任务web使用

    总结来说,Quartz是一个强大的定时任务框架,通过定义作业和触发器,我们可以方便地在Java Web应用中实现各种定时任务的调度。在使用过程中,需要理解并合理配置调度器、作业和触发器,同时注意任务的生命周期管理和...

    quartz cron表达式实例及源码

    Quartz是一个开源的作业调度框架,它允许程序在预定的时间执行任务。在Quartz中,Cron表达式是一种强大的工具,用于定义作业的触发时间。本文将深入探讨Quartz Cron表达式的实例及其源码解析。 一、Cron表达式基础 ...

    详解.NET Core使用Quartz执行调度任务进阶

    Quartz.Net是一个功能丰富的开源任务调度框架,适用于多种.NET环境,包括.NET Core。本文将深入探讨如何在.NET Core 2.2及以上版本中利用Quartz进行高级任务调度。 一、Quartz.Net简介 Quartz.Net提供了强大的定时...

    SpringMVCHibernate集成及常见问题总结

    3. **Hibernate 4.1.0**:Hibernate是一个ORM(对象关系映射)框架,它允许开发者以面向对象的方式操作数据库。在集成Spring时,可以使用Spring的HibernateTemplate或SessionFactory来管理会话和事务。 4. **二级...

    HAP框架-定时调度器使用手册.pdf

    1. **Quartz的基本认知**:Quartz是一个开源的作业调度框架,它允许应用程序定义复杂的调度任务,如定时执行某些操作。HAP框架可能集成Quartz作为其定时调度的基础。 2. **Quartz Job接口概述**:Quartz Job接口是...

    SSH整合常见错误总结

    具体到这个问题,可能是Hibernate的版本过低,导致某些类未被包含。 **解决方案**: 1. 更新Hibernate库到最新版本或至少3.1以上。 2. 清理项目并重新构建,确保所有依赖都已正确加载。 3. 检查`pom.xml`或`build....

    集群分布式以及需要注意的问题.docx

    总之,集群分布式系统的设计是一个复杂但极为重要的过程,它要求开发者在多个层面上进行深入思考和细致规划,以应对设计和部署中可能遇到的挑战。只有这样,才能构建出既高效又可靠的分布式系统,满足现代业务的需求...

Global site tag (gtag.js) - Google Analytics