智慧屏安装APP的最佳实践与跨平台小程序开发的结合
848
2022-09-26
Spring整合quartz关闭,关闭Tomcat Servlet容器时内存泄漏
出错信息
22-Sep-2017 06:19:51.064 WARNING [main] org.apache.catalina.loader.WebAPPClassLoaderBase.clearReferencesThreads The web application [license] appears to have started a thread named [org.springframework.scheduling.quartz.SchedulerFactoryBean#0_Worker-1] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread: java.lang.Object.wait(Native Method) org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:568)
问题分析:servlet容器关闭时发现Quartz定时器线程还在执行,对其无所适从,不懂怎么办只能强行关闭。
解决思路,在关闭容器时的contextDestroyed事件里检测ServletContext里Quartz相关属性,找到Bean然后调用它的方法结束掉。
解决方法:
import java.sql.Driver;import java.sql.DriverManager;import java.sql.SQLException;import java.util.Enumeration;import javax.servlet.ServletContextEvent;import javax.servlet.ServletContextListener;import javax.servlet.ServletRequestEvent;import javax.servlet.ServletRequestListener;import javax.servlet.annotation.WebListener;import javax.servlet.javax.servlet.org.apache.logging.log4j.web.Log4jWebSupport;import org.quartz.impl.StdScheduler;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.web.context.WebApplicationContext;import org.springframework.web.context.support.WebApplicationContextUtils;@WebListenerpublic class AppContextListener implements ServletContextListener{ public void contextDestroyed(ServletContextEvent event) { logger.info("Destroying Context..."); try { WebApplicationContext context = (WebApplicationContext) event.getServletContext().getAttribute( WebApplicationContext.root_WEB_APPLICATION_CONTEXT_ATTRIBUTE); Enumeration
关闭tomcat日志如下:
其他解决方法:Spring配置文件
笔者经过实践,发现在spring配置文件里设置参数也可以达到以上效果
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~