在过去的两天里,我一直在解决此问题,我有一个Web服务,该服务从本地数据库中提取数据,将其转换为XML,然后使用HttpGet发送到另一个Web服务,并获取成功或失败的响应并更新我的本地数据库。一段时间后,我开始出现此错误:


  java.sql.SQLException:无法获得连接,因为我们处于最大连接数(20/20),并且没有可用的连接


我尝试在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)

最佳答案

这通常是由于在使用完连接后无法关闭连接的结果。这称为连接泄漏。

使用完后是否要关闭连接?

关于java - JDBC最大连接数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22385118/

10-11 22:12
查看更多