Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用石英和;春天_Java_Spring_Tomcat_Quartz Scheduler_Apache Commons Logging - Fatal编程技术网

Java 使用石英和;春天

Java 使用石英和;春天,java,spring,tomcat,quartz-scheduler,apache-commons-logging,Java,Spring,Tomcat,Quartz Scheduler,Apache Commons Logging,我使用的是SpringQuartz集成,每次我试图关闭Tomcat时,Quartz进程都无法关闭。这是堆栈跟踪: Exception in thread "org.springframework.scheduling.quartz.SchedulerFactoryBean#0_QuartzSchedulerThread" java.lang.NullPointerException at org.apache.commons.logging.LogFactory.get

我使用的是SpringQuartz集成,每次我试图关闭Tomcat时,Quartz进程都无法关闭。这是堆栈跟踪:

Exception in thread "org.springframework.scheduling.quartz.SchedulerFactoryBean#0_QuartzSchedulerThread" 
        java.lang.NullPointerException
    at org.apache.commons.logging.LogFactory.getCachedFactory(LogFactory.java:979)
    at org.apache.commons.logging.LogFactory.getFactory(LogFactory.java:435)
    at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:685)
    at org.quartz.core.QuartzSchedulerThread.getLog(QuartzSchedulerThread.java:475)
    at org.quartz.core.QuartzSchedulerThread.run(QuartzSchedulerThread.java:404)

以前有人看过吗?

您的WAR中是否有一份commons日志?如果是这样的话,在Tomcat的副本和您的WAR中的副本之间可能会有一种奇怪的交互。尝试删除WAR副本,看看是否有帮助。

如果查看SchedulerFactoryBean,它有一个名为
WaitForJobsToCompleteOnShutton的属性。当Spring ApplicationContext收到关闭请求时,它会通知Quartz调度程序关闭,有条件地告诉它在关闭之前等待所有作业完成

但是,如果Spring收到Tomcat上下文被释放的通知,它只能处理关闭请求(并告诉Quartz)关闭。您如何在Tomcat中使用Spring?您是否注册了一个
ServletContextListener
来调用
applicationContext.destroy()


实际的NPE可能是由于Tomcat在关闭时将应用程序运行的类加载器中的所有
静态
引用设置为
null
。它这样做是为了帮助防止在Tomcat的回收/重启过程中发生内存泄漏。但是,如果Tomcat容器中的线程仍在运行(因为它们没有正确关闭,例如Quartz线程),那么当该线程中的代码(例如Quartz线程中试图访问其记录器的代码-可能保持为
静态
)时,您将看到错误尝试访问任何已为空的静态引用。

这确实解决了我最初遇到的NullPointerException问题-但它被替换为ClassNotFound异常。。。所以我选了你,但是马特的答案实际上解决了剩下的问题,所以我选择了它。谢谢我在哪里可以找到这方面的文档?你可以在谷歌上搜索“tomcat上下文重载静态类加载器”之类的东西。我记得我读过很多关于它的书,当我在使用Tomcat、Spring、Hibernate和log4j的时候,我试图查找关于内存泄漏的信息,所以谷歌也这么做了。