Java JDBC最大连接

Java JDBC最大连接,java,spring,datasource,Java,Spring,Datasource,在过去的两天里,我一直在解决这个问题,我有一个Web服务,它从本地数据库提取数据,将数据转换为XML,并使用HttpGet发送到另一个Web服务,获得成功或失败的响应,并更新本地数据库。一段时间后,我开始出现以下错误: java.sql.SQLException:无法获取连接,因为我们正处于最大连接计数(20/20),并且没有可用的连接 我已经尝试在server.xml和applicationContext中增加maxconnection,但没有任何变化,总是在发生这种情况一段时间后 这是我的数

在过去的两天里,我一直在解决这个问题,我有一个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>
这里有一个例子

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)
服务器遇到内部错误(),无法完成此请求。

异常org.hibernate.exception.genericjdbception:无法打开连接org.hibernate.exception.sqlstatecoverter.handledNonsspecificeException(sqlstatecoverter.java:126)org.hibernate.exception.sqlstatecoverter.convert(sqlstatecoverter.java:114)org.hibernate.exception.jdbceptionhelper.convert(jdbceptionhelper.java:66)org.hibernate.exception.jdbceptionhelper.convert(jdbceptionhelper.java:52)org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:449)org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:167)org.hibernate.jdbc.borroedconnectionproxy.invoke(borroedconnectionproxy.java:74)com.sun.proxy.$Proxy221.prepareStatement(未知源)br.com.fiorde.dao.conexao.connect.PreparedSt(connect.java:54)br.com.fiorde.servlets.webservice.ImportPedidoXML.validausario(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.sql.SQLException:无法获得连接,因为我们正处于最大连接计数(20/20),并且没有可用的org.logicalcbwebs.proxool.Prototyper.quickdent(Prototyper.java:309)org.logicalcbwebs.proxool.ConnectionPool.getConnection(ConnectionPool.java:152)org.logicalcbwebs.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.borroweedconnectionproxy.invoke(borwearedconnectionproxy.java:74)com.sun.proxy.$Proxy221.prepareStatement(未知源)br.com.fiorde.dao.conexao.connect.PreparedSt(connect.java:54)br.com.fiorde.servlets.webservice.ImportPedidoXML.validauario(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)
这通常是由于使用完连接后无法关闭连接造成的。这称为连接泄漏


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

添加我代码的其他部分,我注意到的一点是,无论我是否更改maxconnection池,错误总是状态为20/20,这表明该异常的stacktrace中的代码使用的连接与您正在配置的连接不同。如何操作?我只使用2个co与我的数据库连接,然后从另一台服务器发送/重新请求,如果没有看到更多的代码,很难回答这个问题,但是如果您从JNDI获得数据源,那么您在XML中传递给JndiObjectFactoryBean的属性是否真的在做什么?
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)