Tag: apache commons dbcp

同样的老故事:Tomcat DBCP + MySQL,MySQLNonTransientConnectionException:连接关闭后不允许任何操作

我在这里讨论了关于这个主题的相关问题,并且还搜索了一段时间。 似乎我仍然不明白Tomcat的DBCP配置或机制中的某些内容。 我得到了Tomcat 6,在server.xml配置了DBCP资源: 我也找了mysql的wait_timeout ,默认是28800 。 总之,我尝试了几个选项,但似乎问题是mysql连接空闲28800秒,服务器关闭它们。 我认为池应该用validationQuery和testOnBorrow以某种方式处理这种情况,但似乎我错了。 如果我在空闲时段后在url使用autoReconnect我的第一次查询尝试导致“ …CommunicationsException: The last packet successfully received from the server was 157,493,261 milliseconds ago. ”但在此之后它正常工作。 如果我在url使用autoReconnectForPools或者只是不使用它 – 在空闲时段(8小时)之后我每次.MySQLNonTransientConnectionException: No operations allowed after connection closed得到“ .MySQLNonTransientConnectionException: No operations allowed after connection closed ”。 在这两种情况下,当应用程序加载时,情况会顺利 所以,我得出结论,连接是从mysql的一侧关闭的。 帮助,我错过了什么? 我想在不改变Mysql中的wait_timeout的情况下解决这个问题。 目标 – 稳定的应用程序,如果它发生可以在空闲时间生存:)

如何在Tomcat中创建没有池的数据源

我使用JNDI上下文在Tomcat的context.xml文件中为JDBC驱动程序创建数据源,如下所示, 默认情况下,Tomcat将使用DBCP数据源工厂并创建池化数据源。 我们使用的特定数据库和驱动程序已经支持较低级别的池,而额外的池实际上会损害性能。 无论如何使用像这样的JNDI资源创建基本数据源(没有池),这样我可以在最小配置更改的情况下在不同的数据库之间切换? 我知道我可以编写自己的数据源工厂或使用其他驱动程序来实现这一点,但我正在寻找一个更简单的解决方案。

多个线程同时使用相同的JDBC连接

我试图更好地理解如果多个线程同时使用相同的JDBC连接尝试执行不同的sql查询将会发生什么。 结果是否在function上正确? 性能影响是什么? 线程A是否必须等待线程B完全使用其查询? 或者线程A能否在线程B发送其查询后立即发送其查询,之后数据库将并行执行两个查询? 我看到Apache DBCP使用同步协议来确保从池中删除的连接从池中删除,并且在它们关闭之前不可用。 这似乎比它需要的更不方便。 我正在考虑构建自己的“池”,只需创建一个静态的打开连接列表,并以循环方式分发它们。 我不介意偶尔的性能下降,并且每次使用后不必关闭连接的便利性似乎非常吸引人。 这样做有什么不好吗?

DBCP连接池connection.close()是否返回到池的连接

如果我们执行getConnection(),则使用DBCP中的BasicDataSource,在finally块中我们关闭连接,它确实会返回到池的连接或者关闭连接。 我正在检查的代码片段就是这个 try { Connection conn1 = getJdbcTemplate().getDataSource() .getConnection(); //Some code to call stored proc } catch (SQLException sqlEx) { throw sqlEx; } finally { try { if (conn != null) { conn.close(); } } catch (SQLException ex1) { throw ex1; } } 我正在检查BasicDataSource的源代码,我到达了这个连接的包装类。 private class PoolGuardConnectionWrapper extends DelegatingConnection { private Connection delegate; PoolGuardConnectionWrapper(Connection delegate) […]

如何在启动时预初始化DBCP连接池?

我的项目设置是 – Spring JDBC用于持久化 Apache DBCP 1.4用于连接池 Linux上的Mysql 5 这是我的应用程序的日志,它捕获与数据库的交互。 2013-01-29 15:52:21,549 DEBUG http-bio-8080-exec-3 org.springframework.jdbc.core.JdbcTemplate – Executing SQL query [SELECT id from emp] 2013-01-29 15:52:21,558 DEBUG http-bio-8080-exec-3 org.springframework.jdbc.datasource.DataSourceUtils – Fetching JDBC Connection from DataSource 2013-01-29 15:52:31,878 INFO http-bio-8080-exec-3 jdbc.connection – 1. Connection opened org.apache.commons.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:38) 2013-01-29 15:52:31,878 DEBUG http-bio-8080-exec-3 jdbc.connection – open connections: 1 (1) 2013-01-29 […]

Postgres错误方法org.postgresql.jdbc.PgConnection.createClob()未实现

当我使用连接对象调用createClob方法时,如下所示 Clob clob = con.createClob(); 抛出以下exception。 Caused by: java.sql.SQLFeatureNotSupportedException: Method org.postgresql.jdbc.PgConnection.createClob() is not yet implemented. at org.postgresql.Driver.notImplemented(Driver.java:659) at org.postgresql.jdbc.PgConnection.createClob(PgConnection.java:1246) at org.apache.commons.dbcp2.DelegatingConnection.createClob(DelegatingConnection.java:868) at org.apache.commons.dbcp2.DelegatingConnection.createClob(DelegatingConnection.java:868) 我使用数据库PostgreSQL 9.6.2和JDK8并使用commons-dbcp2连接池,并在pom.xml中添加了以下Postgres依赖项 org.postgresql postgresql 42.1.1 在类org.postgresql.jdbc.PgConnection ,createClob实现如下所示,它抛出exception。 @Override public Clob createClob() throws SQLException { checkClosed(); throw org.postgresql.Driver.notImplemented(this.getClass(), “createClob()”); } 解决此问题的解决方案或解决方法是什么? 或者我们如何在Postgres查询中设置CLOB数据?

登录DBCP

我正在使用Apache Commons DBCP。 有一项任务是跟踪DBCP的内部行为 – 活动和空闲连接的数量。 我发现DBCP根本没有任何这样的日志记录。 是的,当从池中借用连接时,可以编写输出BasicDataSource状态的代码。 但是,在返回或关闭连接时,无法跟踪BasicDataSource的状态,因为连接对象对池没有任何了解。 有任何想法吗?

使用DBCP进行Tomcat配置

我们在嘲笑了一段时间(几个小时)后得到了一个CommunicationsException(来自DBCP)。 错误消息(在Exception中)是在这个问题的结尾 – 但我没有看到在任何配置文件中定义wait_timeout。 (我们应该在哪里看?在tomcat / conf目录之外的某个地方?)。 其次,正如Exception所建议的那样,在哪里放置“Connector / J连接属性’autoReconnect = true’”? 这是tomcat设置文件conf / context.xml中的资源定义: 第三,为什么JVM会等到executeQuery()调用抛出exception? 如果连接超时,getConnection方法应抛出exception,不应该吗? 这是我正在讨论的源代码部分: try { conn = getConnection (true); stmt = conn.createStatement (ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); rset = stmt.executeQuery (bQuery); while (rset.next()) { …. 最后,这里是Stack跟踪的前几行…… com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last packet successfully received from the server was 84,160,724 milliseconds ago. The last packet sent […]

存储过程比应用程序慢于Management Studio

我们有一个存储过程,它在10分钟后从应用程序(Spring – DBCP – jtds)调用时可执行运行,但在从SQL Server Managament Stuido执行时运行30秒。 有人可以提供这个问题的线索吗?

获取连接池中的空闲连接数

在我的项目中,Spring使用org.apache.commons.dbcp.BasicDataSource类管理连接池。 是否可以获得当前时间内有多少个免费或使用的连接? 谢谢。