Кварцевый планировщик не останавливается после завершения работы



Я использую последнюю версию quartz 1.8.3 на jboss 4.0.5.
Задания quartz являются постоянными и сохраняются в локальной базе данных.
Когда я вызываю метод shutdown или standby для выполняющегося объекта Quartz scheduler
задания по-прежнему продолжают выполняться планировщиком, только если состояние заданий пустое и выполнение завершается неудачей.



Я ожидал бы (по крайней мере, согласно документации quartz API), что когда я выключаю или делаю планировщик резервным, что задания, ранее запланированные в база данных не будет выполнена.



Если вызов shutdown или standby на планировщике не является методом для достижения этого, то что же?



задания не просто завершают выполнение, но и продолжают запускаться запланированные задания.



Вот дополнительная информация, как было предложено:



public class QuartzNotificationsSchedulerBean implements NotificationsScheduler, ServletContextAware {
...
public String scheduleNotification(Notification notification) {

// Schedule the job with the trigger
try {
// Define job instance

String groupName = this.createNotificationGroupName(notification);
String triggerName = this.createNoficationTriggerName(notification);
String jobName = this.createNoficationJobName(notification);
JobDetail job = new JobDetail(jobName, groupName , ScheduledNotificationJob.class);

JobDataMap jobDataMap = new JobDataMap();
jobDataMap.putAll(notification.getContext());
job.setJobDataMap(jobDataMap);

Calendar notificationTime = notification.getTime();

Trigger trigger = new SimpleTrigger(triggerName, groupName , notificationTime.getTime());

scheduler.scheduleJob(job, trigger);

return trigger.getName();
} catch (SchedulerException e) {
throw new NotificationScheduleException(e, notification);
}

return null;
}

public void setServletContext(ServletContext servletContext) {
this.sf = (SchedulerFactory) servletContext.getAttribute(QuartzInitializerListener.QUARTZ_FACTORY_KEY);

try {
scheduler = sf.getScheduler();
if(scheduler.isStarted() == false) {
scheduler.start();
}

} catch (SchedulerException e) {
logger.error("Failed to load Quartz scheduler ", e);
}
}
}


Ниже приводится копия свойств конфигурации кварца:



#============================================================================
# Configure Main Scheduler Properties
#============================================================================

org.quartz.scheduler.instanceName = scheduler
org.quartz.scheduler.instanceId = AUTO
org.quartz.scheduler.wrapJobExecutionInUserTransaction = true

#============================================================================
# Configure ThreadPool
#============================================================================

org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 45
org.quartz.threadPool.threadPriority = 5

#============================================================================
# Configure JobStore
#============================================================================

org.quartz.jobStore.misfireThreshold = 60000
org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate
#org.quartz.jobStore.useProperties = false
org.quartz.jobStore.dataSource = FOR_QUARTZ
org.quartz.jobStore.isClustered = true
org.quartz.jobStore.clusterCheckinInterval = 20000


#============================================================================
# Configure Datasources
#============================================================================

org.quartz.dataSource.FOR_QUARTZ.jndiURL = java:jdbc/live-quartz


Вот фрагмент из интернета.xml, где кварц инициализируется:



 <!--  START NOTIFICATION SERVICE -->
<context-param>
<param-name>config-file</param-name>
<param-value>wm_quartz.properties</param-value>
</context-param>
<context-param>
<param-name>shutdown-on-unload</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>start-scheduler-on-load</param-name>
<param-value>true</param-value>
</context-param>

<listener>
<listener-class>org.quartz.ee.servlet.QuartzInitializerListener</listener-class>
</listener>


Спасибо

518   2  

2 ответов:

Если при вызове shutdown выполняются какие-либо задания, то прерывание этих заданий зависит от свойства org.quartz.scheduler.interruptJobsOnShutdown.

См.http://jira.terracotta.org/jira/browse/QTZ-41?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel . Я не могу найти больше документации по этому вопросу.

Другим свойством является org.quartz.scheduler.makeSchedulerThreadDaemon=true, которое завершит работу Quartz scheduler, как только ваш вызывающий поток завершит работу. Я не знаю, что происходит с состоянием рабочих мест.

Как уже упоминалось в комментариях, опубликуйте некоторый код и конфигурацию, чтобы получить четкий ответ.

Вы можете использовать org.quartz.plugin.shutdownhook.cleanShutdown=TRUE в файле свойств quartz

Comments

    Ничего не найдено.