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