2014-03-13 44 views
0

我在這個問題上堅持了過去兩天,我有一個web服務,從本地數據庫提取數據將其轉換爲XML發送到另一個web服務與HttpGet並獲得成功或faile的響應並更新我的本地數據庫。一段時間後,我開始收到此錯誤:JDBC最大連接數

java.sql.SQLException: Couldn't get connection because we are at maximum connection count (20/20) and there are none available

我試圖在我的server.xml和的applicationContext增加MAXCONNECTION但沒有什麼變化,一段時間出現這種情況後始終,

這是我的數據源

<!-- Data sources --> 
<bean id="dataSourceStore" name="dataSourceStore"  class="org.springframework.jndi.JndiObjectFactoryBean" destroy-method="close"> 
    <property name="jndiName"> 
     <value>java:comp/env/jdbc/StoreDS</value> 
    </property> 
    <property name="removeAbandoned" value="true"/> 
    <property name="initialSize" value="250" /> 
    <property name="maxActive" value="350" /> 
</bean> 

我有2種方法來查詢數據庫去,在他們之後我用這個關閉

public void close() { 
    try { 
     if (!this.getJdbcTemplate().getDataSource().getConnection().isClosed()) { 
      this.getJdbcTemplate().getDataSource().getConnection().close(); 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
     // Logger.getLogger(myDAOImpl.class.getName()).log(Level.SEVERE, null, e); 
    } 
    } 

繼承人一個例子

public void updateStatus(Integer id, String name) { 
    super.getJdbcTemplate().update(
      QueryUtil.QueryAtualizaPedido, 
      name, id); 
    close(); 

} 

我server.xml中也有maxActive =「250」,我試圖改變這幾次,但錯誤總是20/20

The server encountered an internal error() that prevented it from fulfilling this request.</u></p><p><b>exception</b> <pre>org.hibernate.exception.GenericJDBCException: Cannot open connection org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:126) org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:114) org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66) org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:52) org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:449) org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:167) org.hibernate.jdbc.BorrowedConnectionProxy.invoke(BorrowedConnectionProxy.java:74) com.sun.proxy.$Proxy221.prepareStatement(Unknown Source) br.com.fiorde.dao.conexao.connect.PreparedSt(connect.java:54) br.com.fiorde.servlets.webservice.ImportPedidoXML.validaUsuario(ImportPedidoXML.java:137) br.com.fiorde.servlets.webservice.ImportPedidoXML.doPost(ImportPedidoXML.java:93) br.com.fiorde.servlets.webservice.ImportPedidoXML.doGet(ImportPedidoXML.java:80)javax.servlet.http.HttpServlet.service(HttpServlet.java:617) javax.servlet.http.HttpServlet.service(HttpServlet.java:717) org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)</pre></p><p><b>root cause</b> <pre>java.sql.SQLException: Couldn't get connection because we are at maximum connection count (20/20) and there are none available org.logicalcobwebs.proxool.Prototyper.quickRefuse(Prototyper.java:309) org.logicalcobwebs.proxool.ConnectionPool.getConnection(ConnectionPool.java:152) org.logicalcobwebs.proxool.ProxoolDriver.connect(ProxoolDriver.java:89) java.sql.DriverManager.getConnection(DriverManager.java:571) java.sql.DriverManager.getConnection(DriverManager.java:233) org.hibernate.connection.ProxoolConnectionProvider.getConnection(ProxoolConnectionProvider.java:75) org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:446) org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:167) org.hibernate.jdbc.BorrowedConnectionProxy.invoke(BorrowedConnectionProxy.java:74) com.sun.proxy.$Proxy221.prepareStatement(Unknown Source) br.com.fiorde.dao.conexao.connect.PreparedSt(connect.java:54) br.com.fiorde.servlets.webservice.ImportPedidoXML.validaUsuario(ImportPedidoXML.java:137) br.com.fiorde.servlets.webservice.ImportPedidoXML.doPost(ImportPedidoXML.java:93) br.com.fiorde.servlets.webservice.ImportPedidoXML.doGet(ImportPedidoXML.java:80) javax.servlet.http.HttpServlet.service(HttpServlet.java:617) javax.servlet.http.HttpServlet.service(HttpServlet.java:717) org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96) 

回答

2

這通常是當您完成使用它們時未能關閉連接的結果。這被稱爲連接泄漏。

當您完成使用它們時,您是否關閉連接?

+0

添加我的代碼的其他位,我注意到的一件事是,無論如果我更改我的maxconnection池錯誤始終指出20/20 –

+0

這將表明該異常的堆棧跟蹤中的代碼使用不同的連接比你正在配置的那個。 –

+0

怎麼樣?我只使用2個連接與我的數據庫,然後從另一個服務器 –