我在jboss 4.0.5上使用目前最新的石英1.8.3。 quartz作业是持久的并保存到本地数据库中。 当我在执行的quartz scheduler对象上调用shutdown或standby方法时 作业仍然由调度程序继续执行,只是作业状态为空且执行失败。
我希望(至少根据石英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
这是一个来自web.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>
由于
答案 0 :(得分:7)
如果在调用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调度程序。我不知道工作状况会发生什么。
如评论中所述,发布一些代码和配置以获得明确的答案。
答案 1 :(得分:3)
org.quartz.plugin.shutdownhook.cleanShutdown=TRUE
在您的石英属性文件中
答案 2 :(得分:1)
请在初始化调度程序时尝试使用这些配置
org.quartz.threadPool.makeThreadsDaemons=true
org.quartz.scheduler.makeSchedulerThreadDaemon=true
org.quartz.scheduler.interruptJobsOnShutdown=true
org.quartz.plugin.shutdownhook.class = org.quartz.plugins.management.ShutdownHookPlugin
org.quartz.plugin.shutdownhook.cleanShutdown = true
您可以参考此链接以获取更多详细信息:https://www.techpaste.com/2016/03/quartz-scheduler-shutdown/