各位有谁遇到过这样的问题。
一个简单任务以固定周期执行无限次的时候,执行一段时间quartz表中的记录就消失了任务停止。 
奇怪的是为什么quartz表中的数据会在执行过程中消失,而且也没有异常和日志出来! 
希望有经验的各位能指点一下。 

解决方案 »

  1.   

    quartz还有这个问题的?关注中,现在的程序中有用到这个组件,是在sping中用该组件配置定时作业,不知道会不会出现这个问题。
      

  2.   

    真没碰到过,我觉得可能是你的store存储配置有问题
      

  3.   

    Scheduler scheduler = factory.getScheduler();
    JobDetail jobDetail = new JobDetail("job1", "group1", HelloJob.class);
    // 触发器监听
    TriggerListener triggerListener = new SingleTriggerListener("0");
    scheduler.addTriggerListener(triggerListener);
    // 任务参数传递(随便写的测试一下)
    JobDataMap map = jobDetail.getJobDataMap();
    for (int i = 0; i < 2; i++) {
    map.put("param" + i, "1");
    }
    // 简单触发器
    SimpleTrigger simpleTrigger = new SimpleTrigger("trigger1", "group1");
    // 执行周期
    simpleTrigger.setRepeatInterval(5000);
    // 执行次数
    simpleTrigger.setRepeatCount(simpleTrigger.REPEAT_INDEFINITELY);
    // 触发器设置监听名称
    simpleTrigger.addTriggerListener(triggerListener.getName());
    // 调度器加载
    scheduler.scheduleJob(jobDetail, simpleTrigger);
    if (!scheduler.isShutdown()) {
    // 启动
    scheduler.start();
    }
      

  4.   

    这个是我触发器监听程序:
    public class SingleTriggerListener implements TriggerListener {
    Log logger = LogFactory.getLog(SingleTriggerListener.class);
    // 执行任务ID
    private String executeId; public SingleTriggerListener(String executeId) {
    this.executeId = executeId;
    } public String getName() {
    return "TriggerListener" + executeId;
    } public void triggerComplete(Trigger arg0, JobExecutionContext arg1, int arg2) {
    if (arg2 == 3) {
    logger.info("触发器" + executeId + "完成!");
    }
    } public void triggerFired(Trigger arg0, JobExecutionContext arg1) {

    } public void triggerMisfired(Trigger arg0) {
    } public boolean vetoJobExecution(Trigger arg0, JobExecutionContext arg1) {
    return false;
    }}
      

  5.   

    我看了一下,你应该用的是RAM的存储吧,有可能你一关服务,或者内存中任务丢失掉了。。你看看是不是你的任务都是存储在内存中的?最好把你的quartzs.properties或者相关配置信息贴出来
      

  6.   

    这是属性文件配置## 集群的配置信息
    org.quartz.scheduler.instanceName = DefaultQuartzScheduler 
    org.quartz.scheduler.rmi.export = false 
    org.quartz.scheduler.rmi.proxy = false 
    org.quartz.scheduler.wrapJobExecutionInUserTransaction = false 
    ## 线程池配置信息
    org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
    org.quartz.threadPool.threadCount = 10
    org.quartz.threadPool.threadPriority = 5
    org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = trueorg.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTXorg.quartz.jobStore.tablePrefix = QRTZ_org.quartz.jobStore.dataSource = qzDSorg.quartz.dataSource.qzDS.driver = oracle.jdbc.driver.OracleDriver
    org.quartz.dataSource.qzDS.URL = jdbc:oracle:thin:@10.144.99.100:1521:SCHEDULER
    org.quartz.dataSource.qzDS.user = QUARTZ
    org.quartz.dataSource.qzDS.password = 123456
    org.quartz.dataSource.qzDS.maxConnections = 10另外以固定的次数执行是没有问题的!
      

  7.   

    没看出来啥没有出现任何异常就停掉了吗?scheduler停了,还是在调度池中没有任务了?如果是任务不见了的话org.quartz.threadPool.threadCount = 10 我觉得可能是同时存在的任务过多?如果是调度停了的话,那应该是出现了什么异常吧?
      

  8.   

    我只执行一个简单的任务,只不过这个任务执行无限次,每次间隔5S。执行时任务信息会保存在DB中并且一直存在!
    但是现在问题是,执行过程中QUARTZ表中的任务消失了,也没有异常.
    时间不是固定的,有的时候执行100次才会消失,有的时候执行10次就消失了,有的时候我停止了服务,表中的数据也会消失。