我试图使用石英来完成每天重新填充缓存的工作。这确实有效,但是我的日志被这样的JobPersistenceExceptions垃圾邮件:
ERROR [07-13-2016 13:32:01 JobStoreSupport.java:3952] - MisfireHandler:错误处理失误:无法存储触发器 ' Test.TriggerCacheReloadJob'对于 ' Test.CacheReloadJob' 工作:com.test.tarif.jobs.CacheReloadJob org.quartz.JobPersistenceException:无法存储触发器 ' Test.TriggerCacheReloadJob'对于 ' Test.CacheReloadJob' job:com.test.tarif.jobs.CacheReloadJob [请参阅嵌套异常: 抛出java.lang.ClassNotFoundException: com.test.tarif.jobs.CacheReloadJob ] org.quartz.impl.jdbcjobstore.JobStoreSupport.storeTrigger(JobStoreSupport.java:1212) 在 org.quartz.impl.jdbcjobstore.JobStoreSupport.doUpdateOfMisfiredTrigger(JobStoreSupport.java:1026) 在 org.quartz.impl.jdbcjobstore.JobStoreSupport.recoverMisfiredJobs(JobStoreSupport.java:975) 在 org.quartz.impl.jdbcjobstore.JobStoreSupport.doRecoverMisfires(JobStoreSupport.java:3187) 在 org.quartz.impl.jdbcjobstore.JobStoreSupport $ MisfireHandler.manage(JobStoreSupport.java:3947) 在 org.quartz.impl.jdbcjobstore.JobStoreSupport $ MisfireHandler.run(JobStoreSupport.java:3968)
引起:java.lang.ClassNotFoundException: com.test.tarif.jobs.CacheReloadJob at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1714) 在 org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559) 在 org.quartz.simpl.InitThreadContextClassLoadHelper.loadClass(InitThreadContextClassLoadHelper.java:72) 在 org.quartz.simpl.CascadingClassLoadHelper.loadClass(CascadingClassLoadHelper.java:114) 在 org.quartz.simpl.CascadingClassLoadHelper.loadClass(CascadingClassLoadHelper.java:138) 在 org.quartz.impl.jdbcjobstore.StdJDBCDelegate.selectJobDetail(StdJDBCDelegate.java:873) 在 org.quartz.impl.jdbcjobstore.JobStoreSupport.storeTrigger(JobStoreSupport.java:1194) ...
我的quartz.properties:
org.quartz.scheduler.instanceName = Test_Scheduler
org.quartz.scheduler.instanceId = 1
org.quartz.scheduler.rmi.export = false
org.quartz.scheduler.rmi.proxy = false
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 3
org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore
org.quartz.scheduler.misfirePolicy = doNothing
我的日程安排员:
public class RestStarterListener implements ServletContextListener {
@Override
public void contextInitialized(final ServletContextEvent arg0) {
try {
log.info("Starting");
JobDetail job = JobBuilder.newJob(CacheReloadJob.class)
.withIdentity("job1", "group1")
.build();
Trigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger1", "group1")
.withSchedule(CronScheduleBuilder.dailyAtHourAndMinute(07, 00)).build();
Scheduler scheduler = new StdSchedulerFactory().getScheduler();
scheduler.clear();
scheduler.scheduleJob(job, trigger);
scheduler.start();
} catch (SchedulerException e) {
log.error("Failed to start Job");
log.error(e, e);
}
}
}
Job.class有一个零参数构造函数,实现Job并保存填充缓存的方法。这很长。 正如我所说的那样,这项工作在7点开始工作,但它每隔4分钟就会发现这些例外日志。这里有人知道如何解决这个问题或者至少如何忽略失火?
答案 0 :(得分:0)
这是因为您在JOB_CLASS_NAME中使用了错误的名称。或者你有几个战争指向同一个数据库(使用相同的表-prefix-)并使用相同的SCHED_NAME。这样,不同的war会触发不在其类路径中的作业。
因此,要么使用不同的表/模式,要么为每个时间表分配不同的名称。
更多信息: http://forums.terracotta.org/forums/posts/list/7073.page