2016-02-05 40 views
2

我們在應用程序中沒有關閉與數據庫的連接時遇到麻煩。我正在嘗試一切,所以我必須嘗試使用​​DBCP。由以下代碼創建的DBCP對象從未關閉

下面是步驟來重現問題:

1)我已經安裝在Windows上:

  • 乾淨的apache-tomcat的-7.0.59
  • 的Java 1.7.0_75

2)我更改了server.xml,我添加了一個指向我們數據庫的資源

<Resource auth="Container" 
defaultTransactionIsolation="READ_COMMITTED" 
driverClassName="oracle.jdbc.OracleDriver" 
maxActive="20" 
initialSize="2" 
maxIdle="10" 
minIdle="2" 
maxWait="10000" 
timeBetweenEvictionRunsMillis="60000" 
minEvictableIdleTimeMillis="60000" 
testOnBorrow="true" 
validationInterval="30000" 
removeAbandoned="true" 
removeAbandonedTimeout="60" 
logAbandoned="true" 
name="docpilotDB" 
password="xxx" 
type="javax.sql.DataSource" 
url="jdbc:oracle:thin:@1.1.1.1:1521:xe" 
username="zzz" 
validationQuery="SELECT 1 FROM DUAL"/> 

3)我已經添加ojdbc6_g.jar到tomcat/lib目錄

4)然後,我已經創建並用

<Context path="/drm"> 
    <ResourceLink global="docpilotDB" name="jdbc/docpilotDB" type="javax.sql.DataSource"/> 
</Context> 

部署應用,並用一個一個測試的servlet

<servlet> 
    <servlet-name>Initial Service</servlet-name> 
    <servlet-class>net.docucom.csas.oms.drm_x.srvlt.InitialService</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

而Servlet類是

public class InitialService extends GenericServlet { 

    private static final Logger log = LoggerFactory.getLogger(InitialService.class); 

    private DataSource ds; 

    public void init(ServletConfig config) throws ServletException { 
     super.init(config); 
     try { 
      ds = getDataSource(); 
      run(); 
     } catch (Exception e) { 
      throw new ServletException(e); 
     } 
    } 

    private DataSource getDataSource() throws SQLException { 
     try { 
      InitialContext ic = new InitialContext(); 
      DataSource ds = (DataSource) ic.lookup("java:comp/env/jdbc/docpilotDB"); 
      return ds; 
     } catch (NamingException e) { 
      throw new RuntimeException("Unable to get DataSource", e); 
     } 
    } 

    public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException { 
    } 

    private synchronized void run() throws Exception { 
     log.info("InitialService: start"); 
     for (int i = 0; i < 100; i++) { 
      log.info("InitialService: counter=" + i); 
      Thread.sleep(100); 
      doSelect(); 
     } 
     log.info("InitialService: end"); 
    } 

    synchronized public Connection connect() throws Exception { 
     int result = -1; 
     log.debug("connect(): start"); 

     Connection con = null; 

     try { 
      con = ds.getConnection(); 
      log.debug("connect(): got connection " + con.getClass().getName()); 
      log.debug("connect(): " + DriverManager.getDriver(ds.getConnection().getMetaData().getURL()).getClass()); 
      result = 0; 
     } catch (Throwable e) { 
      log.error("connect() Error!", e); 
      con = null; 
      return con; 
     } 
     log.debug("connect(): result=" + result); 
     return con; 
    } 

    synchronized public int close(Connection con) throws Exception { 
     int result = -1; 
     log.debug("close(): start"); 

     if (con != null) { 
      log.debug("con.close();"); 
      con.close(); 
      log.debug("con.isClosed=" + con.isClosed()); 
      con = null; 
     } 
     result = 0; 
     log.debug("close(): result=" + result); 
     return result; 
    } 

    public synchronized void doSelect() throws Exception { 
     log.debug("doSelect(): start"); 
     Connection con = null; 
     //ResultSet res = null; 
     try{ 
      con = connect(); 

      // if (stmt == null) { 
      // stmt = con.createStatement(); 
      // } 
      // 
      // res = this.stmt.executeQuery("SELECT * FROM [DRM_OMS].[dbo].[Vat]"); 
      // while (res.next()) { 
      // String Id = res.getString("id"); 
      // String DPH = res.getString("DPH"); 
      // 
      // } 
      // 
      // res.close(); 
      // res = null; 
     } finally { 
      if (con != null){ 
       close(con); 
      } 
     } 

     log.debug("doSelect(): end"); 

    } 

} 

在tomcat服務器上沒有其他定製。

日誌看起來不錯的pritty直到20.iteration

11:12:58.850 INFO InitialService: start 
11:12:58.856 INFO InitialService: counter=0 
11:12:58.957 DEBUG doSelect(): start 
11:12:58.957 DEBUG connect(): start 
11:12:59.056 DEBUG connect(): got connection org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper 
11:12:59.079 DEBUG connect(): class oracle.jdbc.OracleDriver 
11:12:59.079 DEBUG connect(): result=0 
11:12:59.079 DEBUG close(): start 
11:12:59.079 DEBUG con.close(); 
11:12:59.079 DEBUG con.isClosed=true 
11:12:59.079 DEBUG close(): result=0 
11:12:59.080 DEBUG doSelect(): end 
11:12:59.080 INFO InitialService: counter=1 
11:12:59.180 DEBUG doSelect(): start 
11:12:59.180 DEBUG connect(): start 
11:12:59.205 DEBUG connect(): got connection org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper 
11:12:59.761 DEBUG connect(): class oracle.jdbc.OracleDriver 
11:12:59.761 DEBUG connect(): result=0 
11:12:59.762 DEBUG close(): start 
11:12:59.762 DEBUG con.close(); 
11:12:59.762 DEBUG con.isClosed=true 
11:12:59.762 DEBUG close(): result=0 
11:12:59.762 DEBUG doSelect(): end 
11:12:59.762 INFO InitialService: counter=2 
11:12:59.863 DEBUG doSelect(): start 
11:12:59.863 DEBUG connect(): start 
11:12:59.884 DEBUG connect(): got connection org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper 
11:13:00.524 DEBUG connect(): class oracle.jdbc.OracleDriver 
11:13:00.524 DEBUG connect(): result=0 
11:13:00.524 DEBUG close(): start 
11:13:00.524 DEBUG con.close(); 
11:13:00.524 DEBUG con.isClosed=true 
11:13:00.524 DEBUG close(): result=0 
11:13:00.524 DEBUG doSelect(): end 
11:13:00.524 INFO InitialService: counter=3 
11:13:00.624 DEBUG doSelect(): start 
11:13:00.624 DEBUG connect(): start 
11:13:00.679 DEBUG connect(): got connection org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper 
11:13:01.315 DEBUG connect(): class oracle.jdbc.OracleDriver 
11:13:01.315 DEBUG connect(): result=0 
11:13:01.315 DEBUG close(): start 
11:13:01.316 DEBUG con.close(); 
11:13:01.316 DEBUG con.isClosed=true 
11:13:01.316 DEBUG close(): result=0 
11:13:01.316 DEBUG doSelect(): end 
11:13:01.316 INFO InitialService: counter=4 
11:13:01.416 DEBUG doSelect(): start 
11:13:01.416 DEBUG connect(): start 
11:13:01.462 DEBUG connect(): got connection org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper 
11:13:02.146 DEBUG connect(): class oracle.jdbc.OracleDriver 
11:13:02.146 DEBUG connect(): result=0 
11:13:02.146 DEBUG close(): start 
11:13:02.146 DEBUG con.close(); 
11:13:02.146 DEBUG con.isClosed=true 
11:13:02.146 DEBUG close(): result=0 
11:13:02.146 DEBUG doSelect(): end 
11:13:02.147 INFO InitialService: counter=5 
11:13:02.247 DEBUG doSelect(): start 
11:13:02.247 DEBUG connect(): start 
11:13:02.289 DEBUG connect(): got connection org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper 
11:13:02.984 DEBUG connect(): class oracle.jdbc.OracleDriver 
11:13:02.984 DEBUG connect(): result=0 
11:13:02.984 DEBUG close(): start 
11:13:02.984 DEBUG con.close(); 
11:13:02.984 DEBUG con.isClosed=true 
11:13:02.984 DEBUG close(): result=0 
11:13:02.984 DEBUG doSelect(): end 
11:13:02.984 INFO InitialService: counter=6 
11:13:03.084 DEBUG doSelect(): start 
11:13:03.084 DEBUG connect(): start 
11:13:03.118 DEBUG connect(): got connection org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper 
11:13:03.447 DEBUG connect(): class oracle.jdbc.OracleDriver 
11:13:03.447 DEBUG connect(): result=0 
11:13:03.447 DEBUG close(): start 
11:13:03.447 DEBUG con.close(); 
11:13:03.447 DEBUG con.isClosed=true 
11:13:03.447 DEBUG close(): result=0 
11:13:03.447 DEBUG doSelect(): end 
11:13:03.447 INFO InitialService: counter=7 
11:13:03.547 DEBUG doSelect(): start 
11:13:03.547 DEBUG connect(): start 
11:13:03.566 DEBUG connect(): got connection org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper 
11:13:03.804 DEBUG connect(): class oracle.jdbc.OracleDriver 
11:13:03.804 DEBUG connect(): result=0 
11:13:03.804 DEBUG close(): start 
11:13:03.804 DEBUG con.close(); 
11:13:03.804 DEBUG con.isClosed=true 
11:13:03.804 DEBUG close(): result=0 
11:13:03.805 DEBUG doSelect(): end 
11:13:03.805 INFO InitialService: counter=8 
11:13:03.906 DEBUG doSelect(): start 
11:13:03.906 DEBUG connect(): start 
11:13:03.927 DEBUG connect(): got connection org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper 
11:13:04.163 DEBUG connect(): class oracle.jdbc.OracleDriver 
11:13:04.164 DEBUG connect(): result=0 
11:13:04.164 DEBUG close(): start 
11:13:04.164 DEBUG con.close(); 
11:13:04.164 DEBUG con.isClosed=true 
11:13:04.164 DEBUG close(): result=0 
11:13:04.164 DEBUG doSelect(): end 
11:13:04.164 INFO InitialService: counter=9 
11:13:04.265 DEBUG doSelect(): start 
11:13:04.265 DEBUG connect(): start 
11:13:04.282 DEBUG connect(): got connection org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper 
11:13:04.517 DEBUG connect(): class oracle.jdbc.OracleDriver 
11:13:04.518 DEBUG connect(): result=0 
11:13:04.518 DEBUG close(): start 
11:13:04.518 DEBUG con.close(); 
11:13:04.518 DEBUG con.isClosed=true 
11:13:04.518 DEBUG close(): result=0 
11:13:04.518 DEBUG doSelect(): end 
11:13:04.518 INFO InitialService: counter=10 
11:13:04.618 DEBUG doSelect(): start 
11:13:04.618 DEBUG connect(): start 
11:13:04.643 DEBUG connect(): got connection org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper 
11:13:04.876 DEBUG connect(): class oracle.jdbc.OracleDriver 
11:13:04.876 DEBUG connect(): result=0 
11:13:04.876 DEBUG close(): start 
11:13:04.876 DEBUG con.close(); 
11:13:04.876 DEBUG con.isClosed=true 
11:13:04.876 DEBUG close(): result=0 
11:13:04.876 DEBUG doSelect(): end 
11:13:04.876 INFO InitialService: counter=11 
11:13:04.977 DEBUG doSelect(): start 
11:13:04.977 DEBUG connect(): start 
11:13:04.993 DEBUG connect(): got connection org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper 
11:13:05.246 DEBUG connect(): class oracle.jdbc.OracleDriver 
11:13:05.246 DEBUG connect(): result=0 
11:13:05.247 DEBUG close(): start 
11:13:05.247 DEBUG con.close(); 
11:13:05.247 DEBUG con.isClosed=true 
11:13:05.247 DEBUG close(): result=0 
11:13:05.247 DEBUG doSelect(): end 
11:13:05.247 INFO InitialService: counter=12 
11:13:05.348 DEBUG doSelect(): start 
11:13:05.348 DEBUG connect(): start 
11:13:05.371 DEBUG connect(): got connection org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper 
11:13:05.639 DEBUG connect(): class oracle.jdbc.OracleDriver 
11:13:05.639 DEBUG connect(): result=0 
11:13:05.640 DEBUG close(): start 
11:13:05.640 DEBUG con.close(); 
11:13:05.640 DEBUG con.isClosed=true 
11:13:05.640 DEBUG close(): result=0 
11:13:05.640 DEBUG doSelect(): end 
11:13:05.640 INFO InitialService: counter=13 
11:13:05.740 DEBUG doSelect(): start 
11:13:05.740 DEBUG connect(): start 
11:13:05.760 DEBUG connect(): got connection org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper 
11:13:06.002 DEBUG connect(): class oracle.jdbc.OracleDriver 
11:13:06.003 DEBUG connect(): result=0 
11:13:06.003 DEBUG close(): start 
11:13:06.003 DEBUG con.close(); 
11:13:06.003 DEBUG con.isClosed=true 
11:13:06.003 DEBUG close(): result=0 
11:13:06.003 DEBUG doSelect(): end 
11:13:06.003 INFO InitialService: counter=14 
11:13:06.105 DEBUG doSelect(): start 
11:13:06.105 DEBUG connect(): start 
11:13:06.121 DEBUG connect(): got connection org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper 
11:13:06.348 DEBUG connect(): class oracle.jdbc.OracleDriver 
11:13:06.348 DEBUG connect(): result=0 
11:13:06.348 DEBUG close(): start 
11:13:06.348 DEBUG con.close(); 
11:13:06.348 DEBUG con.isClosed=true 
11:13:06.348 DEBUG close(): result=0 
11:13:06.348 DEBUG doSelect(): end 
11:13:06.348 INFO InitialService: counter=15 
11:13:06.448 DEBUG doSelect(): start 
11:13:06.448 DEBUG connect(): start 
11:13:06.467 DEBUG connect(): got connection org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper 
11:13:06.747 DEBUG connect(): class oracle.jdbc.OracleDriver 
11:13:06.747 DEBUG connect(): result=0 
11:13:06.747 DEBUG close(): start 
11:13:06.747 DEBUG con.close(); 
11:13:06.747 DEBUG con.isClosed=true 
11:13:06.747 DEBUG close(): result=0 
11:13:06.747 DEBUG doSelect(): end 
11:13:06.747 INFO InitialService: counter=16 
11:13:06.848 DEBUG doSelect(): start 
11:13:06.848 DEBUG connect(): start 
11:13:06.862 DEBUG connect(): got connection org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper 
11:13:07.112 DEBUG connect(): class oracle.jdbc.OracleDriver 
11:13:07.112 DEBUG connect(): result=0 
11:13:07.112 DEBUG close(): start 
11:13:07.112 DEBUG con.close(); 
11:13:07.112 DEBUG con.isClosed=true 
11:13:07.112 DEBUG close(): result=0 
11:13:07.112 DEBUG doSelect(): end 
11:13:07.112 INFO InitialService: counter=17 
11:13:07.214 DEBUG doSelect(): start 
11:13:07.214 DEBUG connect(): start 
11:13:07.233 DEBUG connect(): got connection org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper 
11:13:07.477 DEBUG connect(): class oracle.jdbc.OracleDriver 
11:13:07.479 DEBUG connect(): result=0 
11:13:07.479 DEBUG close(): start 
11:13:07.479 DEBUG con.close(); 
11:13:07.479 DEBUG con.isClosed=true 
11:13:07.479 DEBUG close(): result=0 
11:13:07.480 DEBUG doSelect(): end 
11:13:07.480 INFO InitialService: counter=18 
11:13:07.580 DEBUG doSelect(): start 
11:13:07.580 DEBUG connect(): start 
11:13:07.603 DEBUG connect(): got connection org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper 
11:13:07.866 DEBUG connect(): class oracle.jdbc.OracleDriver 
11:13:07.867 DEBUG connect(): result=0 
11:13:07.867 DEBUG close(): start 
11:13:07.867 DEBUG con.close(); 
11:13:07.867 DEBUG con.isClosed=true 
11:13:07.867 DEBUG close(): result=0 
11:13:07.867 DEBUG doSelect(): end 
11:13:07.867 INFO InitialService: counter=19 
11:13:07.968 DEBUG doSelect(): start 
11:13:07.968 DEBUG connect(): start 
11:13:07.991 DEBUG connect(): got connection org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper 
11:13:18.001 ERROR connect() Error! 
java.util.NoSuchElementException: Timeout waiting for idle object 
    at org.apache.tomcat.dbcp.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:1171) ~[tomcat-dbcp.jar:7.0.59] 
    at org.apache.tomcat.dbcp.dbcp.AbandonedObjectPool.borrowObject(AbandonedObjectPool.java:79) ~[tomcat-dbcp.jar:7.0.59] 
    at org.apache.tomcat.dbcp.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:106) ~[tomcat-dbcp.jar:7.0.59] 
    ... 21 common frames omitted 
Wrapped by: org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot get a connection, pool error Timeout waiting for idle object 
    at org.apache.tomcat.dbcp.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:114) ~[tomcat-dbcp.jar:7.0.59] 
    at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044) ~[tomcat-dbcp.jar:7.0.59] 
    at net.docucom.csas.oms.drm_x.srvlt.InitialService.connect(InitialService.java:68) [InitialService.class:na] 
    at net.docucom.csas.oms.drm_x.srvlt.InitialService.doSelect(InitialService.java:99) [InitialService.class:na] 
    at net.docucom.csas.oms.drm_x.srvlt.InitialService.run(InitialService.java:54) [InitialService.class:na] 
    at net.docucom.csas.oms.drm_x.srvlt.InitialService.init(InitialService.java:30) [InitialService.class:na] 
    at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1284) [catalina.jar:7.0.59] 
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1197) [catalina.jar:7.0.59] 
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1087) [catalina.jar:7.0.59] 
    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5262) [catalina.jar:7.0.59] 
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5550) [catalina.jar:7.0.59] 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) [catalina.jar:7.0.59] 
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901) [catalina.jar:7.0.59] 
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877) [catalina.jar:7.0.59] 
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:649) [catalina.jar:7.0.59] 
    at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1081) [catalina.jar:7.0.59] 
    at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1877) [catalina.jar:7.0.59] 
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) [na:1.7.0_75] 
    at java.util.concurrent.FutureTask.run(FutureTask.java:262) [na:1.7.0_75] 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [na:1.7.0_75] 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [na:1.7.0_75] 
    at java.lang.Thread.run(Thread.java:745) [na:1.7.0_75] 
11:13:18.001 DEBUG doSelect(): end 
11:13:18.001 INFO InitialService: counter=20 
11:13:18.102 DEBUG doSelect(): start 
11:13:18.102 DEBUG connect(): start 

和廢棄的超時後的tomcat的控制檯是充滿了DBCP未關閉的消息。

org.apache.tomcat.dbcp.dbcp.AbandonedTrace$AbandonedObjectException: DBCP object created 2016-02-05 11:12:59 by the following code was never closed: 
     at org.apache.tomcat.dbcp.dbcp.AbandonedTrace.setStackTrace(AbandonedTrace.java:139) 
     at org.apache.tomcat.dbcp.dbcp.AbandonedObjectPool.borrowObject(AbandonedObjectPool.java:81) 
     at org.apache.tomcat.dbcp.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:106) 
     at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044) 
     at net.docucom.csas.oms.drm_x.srvlt.InitialService.connect(InitialService.java:68) 
     at net.docucom.csas.oms.drm_x.srvlt.InitialService.doSelect(InitialService.java:99) 
     at net.docucom.csas.oms.drm_x.srvlt.InitialService.run(InitialService.java:54) 
     at net.docucom.csas.oms.drm_x.srvlt.InitialService.init(InitialService.java:30) 
     at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1284) 
     at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1197) 
     at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1087) 
     at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5262) 
     at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5550) 
     at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
     at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901) 
     at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877) 
     at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:649) 
     at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1081) 
     at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1877) 
     at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) 
     at java.util.concurrent.FutureTask.run(FutureTask.java:262) 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
     at java.lang.Thread.run(Thread.java:745) 
org.apache.tomcat.dbcp.dbcp.AbandonedTrace$AbandonedObjectException: DBCP object created 2016-02-05 11:12:59 by the following code was never closed: 
     at org.apache.tomcat.dbcp.dbcp.AbandonedTrace.init(AbandonedTrace.java:90) 
     at org.apache.tomcat.dbcp.dbcp.AbandonedTrace.<init>(AbandonedTrace.java:73) 
     at org.apache.tomcat.dbcp.dbcp.DelegatingDatabaseMetaData.<init>(DelegatingDatabaseMetaData.java:52) 
     at org.apache.tomcat.dbcp.dbcp.DelegatingConnection.getMetaData(DelegatingConnection.java:345) 
................... 

有人可以幫助解決這個問題嗎?現在沒有邏輯了,我只通過DataSource與DBCP和連接作鬥爭。我很確定,我正在關閉連接。在Java代碼中很明顯。

爲什麼連接沒有關閉? 請幫忙!

親切的問候,並感謝您的時間和幫助。

馬丁M.

+0

我也面臨同樣的問題。你有沒有找到解決方案@ M.Mayer? – srihari

回答

1

你拿到這個地方?我有我自己的問題與DBCP2。我試圖從一個J2EE環境轉移到一個批處理Java環境,所以我用DBCP2替換容器數據源在Spring和DB2下的覆蓋

我很確定我也關閉了我的連接,並沒有得到您在這裏描述的連接沒有關閉錯誤,但是在一段時間之後會得到超時,並且可以通過應用服務器框上的netstat看到服務器正在保持與數據庫服務器的連接,並且它似乎會增加,直到應用程序關閉。

如果我設置maxActive = -1我沒有得到超時,但當然連接不斷增加,最終服務器拋出錯誤,它有太多打開文件(它是RHEL)。

我在連接管理中加入了線程本地日誌記錄的負載,以確定任何調用可能缺少關閉調用的地方,因爲代碼庫是30個項目中的250K +代碼行,並且幾乎不可能全部檢查。

任何見識都是值得歡迎的。我想知道是否嘗試c3p0