报错内容如下
[INFO][2018-08-24 21:30:11] com.alibaba.druid.pool.DruidDataSource.close(DruidDataSource.java:1825) {dataSource-1} closed
24-Aug-2018 21:30:11.702 警告 [localhost-startStop-2] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads The web application [ROOT] appears to have started a thread named [pool-2-thread-1] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread:
sun.misc.Unsafe.park(Native Method)
java.util.concurrent.locks.LockSupport.park(LockSupport.java:186)
java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2043)
java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1068)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
java.lang.Thread.run(Thread.java:745)
24-Aug-2018 21:30:11.702 警告 [localhost-startStop-2] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads The web application [ROOT] appears to have started a thread named [pool-3-thread-1] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread:
sun.misc.Unsafe.park(Native Method)
java.util.concurrent.locks.LockSupport.park(LockSupport.java:186)
java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2043)
java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1068)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
java.lang.Thread.run(Thread.java:745)
24-Aug-2018 21:30:11.703 警告 [localhost-startStop-2] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads The web application [ROOT] appears to have started a thread named [pool-4-thread-1] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread:
sun.misc.Unsafe.park(Native Method)
java.util.concurrent.locks.LockSupport.park(LockSupport.java:186)
java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2043)
java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1068)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
java.lang.Thread.run(Thread.java:745)
24-Aug-2018 21:30:11.705 信息 [main] org.apache.coyote.AbstractProtocol.stop Stopping ProtocolHandler ["http-apr-8080"]
24-Aug-2018 21:30:11.773 信息 [main] org.apache.coyote.AbstractProtocol.stop Stopping ProtocolHandler ["ajp-apr-8009"]
24-Aug-2018 21:30:11.825 信息 [main] org.apache.coyote.AbstractProtocol.destroy Destroying ProtocolHandler ["http-apr-8080"]
24-Aug-2018 21:30:11.826 信息 [main] org.apache.coyote.AbstractProtocol.destroy Destroying ProtocolHandler ["ajp-apr-8009"]
根据网上的解决方法,我已经关闭了定时任务Scheduler,关闭了开启定时任务的线程池,也关闭了数据源。为什么还是报错?
我的代码
package com.yz.robot.spring;
import com.yz.robot.mcore.utils.SpringContextUtils;
import com.yz.robot.mquartz.service.ScheduleJobService;
import com.yz.robot.mquartz.service.impl.ScheduleJobServiceImpl;
import com.yz.robot.mquartz.utils.ScheduleJob;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.impl.StdSchedulerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import java.sql.Driver;
import java.sql.DriverManager;
import java.util.Enumeration;
import java.util.List;
import java.util.Set;
import java.util.concurrent.ExecutorService;
public class QuartzJobListener implements ServletContextListener
{
@Autowired
private ScheduleJob scheduleJob;
@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("--------------开始-------");
}
@Override
public void contextDestroyed(ServletContextEvent sce){
WebApplicationContext webApplicationContext = WebApplicationContextUtils.getWebApplicationContext(sce.getServletContext());
if (webApplicationContext != null){
Object scheduleJobServiceImpl = webApplicationContext.getBean("scheduleJob");
System.out.println("-------------------------2");
System.out.println(scheduleJobServiceImpl !=null);
}else {
System.out.println("获取应用程序上下文失败!");
}
try {
Scheduler defaultScheduler = StdSchedulerFactory.getDefaultScheduler();
System.out.println("-------------------------2");
System.out.println(defaultScheduler.isShutdown());
defaultScheduler.shutdown(true);
Thread.sleep(1000);
System.out.println(defaultScheduler.isShutdown());
ScheduleJob scheduleJob = (ScheduleJob) SpringContextUtils.getBean("scheduleJob");
//scheduleJobServiceImpl
ExecutorService service = scheduleJob.getService();
System.out.println("-------------------------3");
System.out.println(service!=null);
System.out.println(service.isShutdown());
List<Runnable> runnables = service.shutdownNow();
System.out.println(service.isShutdown());
Thread.sleep(1000);
System.out.println("-------------------------4");
Enumeration<Driver> drivers = DriverManager.getDrivers();
while (drivers.hasMoreElements()){
Driver driver = drivers.nextElement();
DriverManager.deregisterDriver(driver);
System.out.println("又注销了一个driver"+driver.toString());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
大佬们帮帮我吧???