关闭应用程序服务器后立即关闭所有石英作业?
shutdown all the quartz jobs as soon as app server is shut down?
我有一个 Web 应用程序,我在其中定期 运行 做一些工作,因此我在这里使用石英框架。以下是我开始所有工作的方式:
服务器一启动,就会自动调用postInit
方法。然后我开始我所有的工作,一切正常:
@PostConstruct
public void postInit() {
logger.logInfo("Starting all jobs");
StdSchedulerFactory factory = new StdSchedulerFactory();
try {
factory.initialize(App.class.getClassLoader().getResourceAsStream("quartz.properties"));
Scheduler scheduler = factory.getScheduler();
// starts all our jobs using quartz_config.xml file
scheduler.start();
} catch (SchedulerException ex) {
logger.logError("error while starting scheduler= ", ExceptionUtils.getStackTrace(ex));
}
}
@PreDestroy
public void shutdown() {
logger.logInfo("Shutting down all jobs");
}
现在我想在我们尝试关闭应用程序服务器时立即停止所有 运行 的作业。因此,每当我们尝试关闭应用服务器时,它都会自动调用 shutdown
方法。现在我需要一些方法,我们可以在调用 shutdown
方法后立即关闭所有作业。一旦调用 shutdown
方法,我可以关闭所有作业的最佳方法是什么?
下面是我的 "quartz.properties" 文件。我真的需要 "quartz.properties" 文件吗,因为我想我无论如何都在使用默认值?
#------------------------- Threads ---------------------------------#
# how many jobs we should run at the same time?
org.quartz.threadPool.threadCount=15
# ----------------------------- Plugins --------------------------- #
# class from where we should load the configuration data for each job and trigger.
org.quartz.plugin.jobInitializer.class=org.quartz.plugins.xml.XMLSchedulingDataProcessorPlugin
org.quartz.plugin.jobInitializer.fileNames = quartz_config.xml
org.quartz.plugin.jobInitializer.failOnFileNotFound = true
org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore
你可以使用下面的Scheduler.shutdown()
方法,即使你使用默认参数,外部化石英配置也是一个好主意。这将使您的代码更加灵活。
private Scheduler scheduler;
@PostConstruct
public void postInit() {
logger.logInfo("Starting all jobs");
StdSchedulerFactory factory = new StdSchedulerFactory();
try {
factory.initialize(App.class.getClassLoader().getResourceAsStream("quartz.properties"));
scheduler = factory.getScheduler();
// starts all our jobs using quartz_config.xml file
scheduler.start();
} catch (SchedulerException ex) {
logger.logError("error while starting scheduler= ", ExceptionUtils.getStackTrace(ex));
}
}
@PreDestroy
public void shutdown() throws SchedulerException {
logger.logInfo("Shutting down all jobs");
scheduler.shutdown();
}
我有一个 Web 应用程序,我在其中定期 运行 做一些工作,因此我在这里使用石英框架。以下是我开始所有工作的方式:
服务器一启动,就会自动调用postInit
方法。然后我开始我所有的工作,一切正常:
@PostConstruct
public void postInit() {
logger.logInfo("Starting all jobs");
StdSchedulerFactory factory = new StdSchedulerFactory();
try {
factory.initialize(App.class.getClassLoader().getResourceAsStream("quartz.properties"));
Scheduler scheduler = factory.getScheduler();
// starts all our jobs using quartz_config.xml file
scheduler.start();
} catch (SchedulerException ex) {
logger.logError("error while starting scheduler= ", ExceptionUtils.getStackTrace(ex));
}
}
@PreDestroy
public void shutdown() {
logger.logInfo("Shutting down all jobs");
}
现在我想在我们尝试关闭应用程序服务器时立即停止所有 运行 的作业。因此,每当我们尝试关闭应用服务器时,它都会自动调用 shutdown
方法。现在我需要一些方法,我们可以在调用 shutdown
方法后立即关闭所有作业。一旦调用 shutdown
方法,我可以关闭所有作业的最佳方法是什么?
下面是我的 "quartz.properties" 文件。我真的需要 "quartz.properties" 文件吗,因为我想我无论如何都在使用默认值?
#------------------------- Threads ---------------------------------#
# how many jobs we should run at the same time?
org.quartz.threadPool.threadCount=15
# ----------------------------- Plugins --------------------------- #
# class from where we should load the configuration data for each job and trigger.
org.quartz.plugin.jobInitializer.class=org.quartz.plugins.xml.XMLSchedulingDataProcessorPlugin
org.quartz.plugin.jobInitializer.fileNames = quartz_config.xml
org.quartz.plugin.jobInitializer.failOnFileNotFound = true
org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore
你可以使用下面的Scheduler.shutdown()
方法,即使你使用默认参数,外部化石英配置也是一个好主意。这将使您的代码更加灵活。
private Scheduler scheduler;
@PostConstruct
public void postInit() {
logger.logInfo("Starting all jobs");
StdSchedulerFactory factory = new StdSchedulerFactory();
try {
factory.initialize(App.class.getClassLoader().getResourceAsStream("quartz.properties"));
scheduler = factory.getScheduler();
// starts all our jobs using quartz_config.xml file
scheduler.start();
} catch (SchedulerException ex) {
logger.logError("error while starting scheduler= ", ExceptionUtils.getStackTrace(ex));
}
}
@PreDestroy
public void shutdown() throws SchedulerException {
logger.logInfo("Shutting down all jobs");
scheduler.shutdown();
}