Я пытаюсь использовать кварц, чтобы назначать задания в веб-приложении, работающем на Glassfish. Я использую RAMJobStore. Проблема в том, что иногда задание, которое было запланировано, не выполняется, даже если оно было запланировано в прошлом или в будущем. Количество заданий крайне низкое, в общей сложности до 20 заданий, запланированных в любое время на планировщике, и гарантированного максимума 1 работы, выполняемой одновременно, поэтому я предполагаю, что количество потоков не является проблемой, я мог бы установить его threadCount 1, и он все равно будет работать. Планировщик также не отключается до того, как сервлет будет уничтожен. Так что может быть причиной того, что некоторые рабочие места не выполняются?Quartz не выполняет задания случайно
StartupServlet
public void init()
{
try
{
scheduler = StdSchedulerFactory.getDefaultScheduler();
scheduler.start();
loadJobs();
}
catch (SchedulerException se)
{
se.printStackTrace();
}
}
@Override
public void destroy()
{
try
{
scheduler.shutdown();
}
catch (SchedulerException se)
{
se.printStackTrace();
}
}
Планирование работы
JobDetail job = JobBuilder.newJob(ScheduledTransactionJob.class)
.withIdentity(transaction.getId())
.build();
Trigger trigger = TriggerBuilder.newTrigger()
.withIdentity(transaction.getId())
.startAt(date)
.build();
try
{
scheduler.scheduleJob(job, trigger);
dateFormat = new SimpleDateFormat("dd MMM yyyy, HH:mm:ss");
String recurringTransactionTime = dateFormat.format(date);
logger.info("Scheduled job for " + recurringTransactionTime);
}
catch (SchedulerException se)
{
se.printStackTrace();
}
quartz.properties
#============================================================================
# Configure Main Scheduler Properties
#============================================================================
org.quartz.scheduler.skipUpdateCheck = true
org.quartz.scheduler.instanceName = AppScheduler
org.quartz.scheduler.instanceId = AUTO
#============================================================================
# Configure ThreadPool
#============================================================================
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 25
org.quartz.threadPool.threadPriority = 10
#============================================================================
# Configure JobStore
#============================================================================
org.quartz.jobStore.misfireThreshold = 60000
org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore