我有两个预定的石英作业。一个在应用程序端,一个在客户端大小。这是一个非常简单的设置,但我显然错过了它的工作原理,因为我检查了他们的文档和其他几个网站。
我有两个单独的类,一个用于作业,一个用于触发器。应用程序端的这些类正在运行,但不在客户端。它们在功能上是相同的,吐出日志用于测试。当我的客户端被调用时,会执行特定的工作并关闭。计划一分钟吐出一个文件的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开始,下次调用应用程序时它将重置时间