在哪里放石英调度器只开始一次

时间:2016-01-06 16:07:33

标签: java quartz-scheduler

我有两个预定的石英作业。一个在应用程序端,一个在客户端大小。这是一个非常简单的设置,但我显然错过了它的工作原理,因为我检查了他们的文档和其他几个网站。

我有两个单独的类,一个用于作业,一个用于触发器。应用程序端的这些类正在运行,但不在客户端。它们在功能上是相同的,吐出日志用于测试。当我的客户端被调用时,会执行特定的工作并关闭。计划一分钟吐出一个文件的Quartz吐出一个并随应用程序消失。我实际上是通过

手动调用调度程序
ScheduledJobTrigger sjt = new ScheduledJobTrigger();

             sjt.doJob(); 

在我的应用程序逻辑中。

这肯定不是调度程序启动的方式,因为它会在每次调用客户端时重置时间。我的目标是应用程序每24小时生成一个文件,但是在应用程序的客户端servelett元素完成后,无法了解触发器的拉动方式或工作方式。我意识到我会对这篇文章的措辞感到不满,但感谢任何对无知者的帮助。

编辑:

public class FileCreationJob implements Job {
     private static final Logger log = LoggerFactory.getLogger(FileCreationJob.class);
    public void execute(JobExecutionContext context) throws JobExecutionException {
        // TODO Auto-generated method stub
        JobKey jobKey = context.getJobDetail().getKey();
        System.out.println("Scheduler Scheduling........"+ jobKey);
         if (log.isDebugEnabled()) log.debug("SCHEDULER>>>>>>>>>>>>>>>>>>>>>>>>>>>>>("+jobKey+")");


    }

}

实际工作本身。

public class ScheduledJobTrigger {
    public void doJob() throws Exception {

        SchedulerFactory schedFact = new StdSchedulerFactory();

        Scheduler sched = schedFact.getScheduler();
        sched.start();

        JobDetail job = JobBuilder.newJob(FileCreationJob.class)
                .withIdentity("FileCreationJob", "FirstJob").build();

        Trigger trig = TriggerBuilder
                .newTrigger()
                .withIdentity("FileCreationJobTrigger", "FirstJob").startNow()
                .withSchedule(
                        SimpleScheduleBuilder.simpleSchedule()
                                .withIntervalInMinutes(1).repeatForever())
                .build();

        sched.scheduleJob(job, trig);



    }
}

我的第一个误解就是如何将这一切都推迟一次而且只启动一次。我最终希望它每24小时启动一次工作,如果我的应用程序每次启动时都会调用它,那么它将重置预定的时间参数。即如果我希望它在3开始,下次调用应用程序时它将重置时间

0 个答案:

没有答案