項目簡介:Jsp3.0+dbcp連接池1.4+tomcat8.0因連接池泄露,有些connection無法關(guān)閉,想可以手動kill掉那些連接時間超過2分鐘的Connection連接。然后寫了一個線程,將它掛在ServletContextListener監(jiān)聽器下,然后tomcat一啟動,tomcat會被該線程卡住,出現(xiàn)一直執(zhí)行線程,而不繼續(xù)加載項目的情況,導致項目無法訪問,想請問下,這種情況該怎么辦。怎么改這種模式才是對的。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監(jiān)聽器類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
提交
取消