项目简介:Jsp3.0+dbcp连接池1.4+tomcat8.0因连接池泄露,有些connection无法关闭,想可以手动kill掉那些连接时间超过2分钟的Connection连接。然后写了一个线程,将它挂在ServletContextListener监听器下,然后tomcat一启动,tomcat会被该线程卡住,出现一直执行线程,而不继续加载项目的情况,导致项目无法访问,想请问下,这种情况该怎么办。怎么改这种模式才是对的。tomcat启动错误:信息: Deploying web application directory F:\tomcat-8.0\webapps\host-manager
一月 05, 2017 3:17:32 下午 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deployment of web application directory F:\tomcat-8.0\webapps\host-manager has finished in 41 ms
一月 05, 2017 3:17:32 下午 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deploying web application directory F:\tomcat-8.0\webapps\manager
一月 05, 2017 3:17:32 下午 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deployment of web application directory F:\tomcat-8.0\webapps\manager has finished in 24 ms
一月 05, 2017 3:17:32 下午 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deploying web application directory F:\tomcat-8.0\webapps\ROOT
一月 05, 2017 3:17:33 下午 org.apache.jasper.servlet.TldScanner scanJars
信息: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
kill 5 ;
kill 6 ;
kill 7 ;
kill 5 ;
kill 6 ;
kill 7 ;代码如下:ServletContextListener监听器类package com.hebeu.util;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class ApplicationListener implements ServletContextListener{
Thread thread = new Thread(new KillConn());
public void contextInitialized(ServletContextEvent sce) {
while (true) {
try {
thread.run();
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public void contextDestroyed(ServletContextEvent sce) {
}
}KillConn.java线程package com.hebeu.util;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
public class KillConn implements Runnable{
public void run() {
String fingSql = "SELECT CONCAT('kill ',id,' ;')'sql' FROM information_schema.`PROCESSLIST` WHERE TIME>10";
ArrayList<String> listSql = new ArrayList<String>();
Connection conn = null;
try {
conn = JDBCUtil.getConn();
conn.setAutoCommit(false);
ResultSet rs = JDBCUtil.findOne(fingSql, conn);
while(rs.next())
{
listSql.add(rs.getString(1));
}
for (String string : listSql) {
System.out.println(string);
// JDBCUtil.doSql(string, conn);
}
conn.commit();
} catch (SQLException e) {
try {
conn.rollback();
} catch (SQLException e1) {
e1.printStackTrace();
}
e.printStackTrace();
}finally{
JDBCUtil.closeAll(null, null, conn);
}
}
}
添加回答
举报
0/150
提交
取消