我遇到了阻止jboss的问题。大多数时候我执行关机。它会在几秒钟内停止服务器。
但有时需要停止,我必须杀死这个过程。
关闭需要很长时间,我看到调度程序正在运行,在日志中我看到了
2014-07-14 19:19:29,124 INFO [org.springframework.scheduling.quartz.SchedulerFactoryBean] (JBoss Shutdown Hook) Shutting down Quartz Scheduler
2014-07-14 19:19:29,124 INFO [org.quartz.core.QuartzScheduler] (JBoss Shutdown Hook) Scheduler scheduler_$_s608203at1vl07shutting down.
2014-07-14 19:19:29,124 INFO [org.quartz.core.QuartzScheduler] (JBoss Shutdown Hook) Scheduler scheduler_$_s608203at1vl07 paused.
之后没有任何事情。
答案 0 :(得分:1)
确保Quartz调度程序线程及其线程池中的所有线程都被标记为守护程序线程,以便它们不会阻止JVM退出。
这可以通过分别设置以下Quartz属性来实现:
org.quartz.scheduler.makeSchedulerThreadDaemon=true
org.quartz.threadPool.makeThreadsDaemons=true
虽然将调度程序线程标记为守护程序线程是安全的,但在将线程池线程标记为守护程序线程之前应该考虑,因为当JVM退出时,这些“工作”线程可能正在执行某些线程你不想突然中止的逻辑。如果是这种情况,您可以让您的作业实现org.quartz.InterruptableJob
接口,并在应用程序中的某个位置实现JVM关闭挂钩,该钩子会中断当前正在执行的所有作业(其列表可以从org.quartz.Scheduler
获取API)。