标签: apache-commons-dbcp

NoClassDefFoundError:org/apache/commons/pool/KeyedObjectPoolFactory BasicDataSource Spring

我是春天的新手,还在学习.我在Mac上使用Spring Tool Suite 3.5和Java 6.我正在尝试使用BasicDataSource

<bean id="dataSource" destroy-method="close" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName" value="${jdbc.driver}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
    </bean>
Run Code Online (Sandbox Code Playgroud)

我有我的类路径中的以下jar文件:commons-dbcp-1.4.jar,commons-pool2-2.2.jar,commons-collections4-4.0.jar.但我仍然看到了一个NoClassDefFoundError参考KeyedObjectPoolFactory.

Error creating bean with name 'dataSource' defined in class path resource [test-   infrastructure-config.xml]: Instantiation of bean failed; nested exception is java.lang.NoClassDefFoundError: org/apache/commons/pool/KeyedObjectPoolFactory
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:328)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:106)
at org.springframework.beans.factory.support.ConstructorResolver.resolveConstructorArguments(ConstructorResolver.java:630)
at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:148)
Run Code Online (Sandbox Code Playgroud)

我已经搜索了一个答案,发现了一个类似的问题,但与那个问题不同的是,我的类路径上有JAR.

我在此论坛中格式化代码时遇到问题.我的XML代码没有出现.抱歉.

apache spring jar apache-commons-dbcp

7
推荐指数
1
解决办法
1万
查看次数

Hikari 和借用选项测试

我使用带有Hikari连接池、jpa 和 postgres 的spring boot 2 。

是否有任何理由继续使用这些选项

spring.datasource.testOnBorrow=true
spring.datasource.validationQuery=SELECT 1
spring.datasource.testWhileIdle
Run Code Online (Sandbox Code Playgroud)

spring datasource apache-commons-dbcp spring-boot hikaricp

7
推荐指数
1
解决办法
1万
查看次数

在dbcp中使用PreparedStatement池

有人可以解释如何使用dbcp准确准备连接池吗?(如果可能,请使用一些示例代码).我已经想出如何打开它 - 将KeyedObjectPoolFactory传递给PoolableConnectionFactory.但是之后应该如何定义具体的准备陈述呢?现在我只使用PoolingDataSource从池中获取连接.如何使用池中的预准备语句?

java connection-pooling prepared-statement apache-commons-dbcp

6
推荐指数
1
解决办法
8548
查看次数

数据库连接池库的最佳选择是什么?(c3p0问题)

我使用hirbernate重载java应用程序.我曾经使用连接池DBCP,但它有连接丢失的问题.比我切换到c3p0.但现在它有时会破解线程,我不知道为什么.像这儿:

"1343694829@qtp-515693101-1941" prio=10 tid=0x00007fa6b0940000 nid=0x4e12 runnable [0x00007fa6f8f1c000]
   java.lang.Thread.State: RUNNABLE
    at com.mchange.v2.resourcepool.BasicResourcePool.doCheckinManaged(BasicResourcePool.java:1258)
    at com.mchange.v2.resourcepool.BasicResourcePool.checkinResource(BasicResourcePool.java:647)
    - locked <0x00007fa7286d9728> (a com.mchange.v2.resourcepool.BasicResourcePool)
    at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$ConnectionEventListenerImpl.doCheckinResource(C3P0PooledConnectionPool.java:636)
    at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$ConnectionEventListenerImpl.connectionClosed(C3P0PooledConnectionPool.java:630)
    at com.mchange.v2.c3p0.util.ConnectionEventSupport.fireConnectionClosed(ConnectionEventSupport.java:55)
    at com.mchange.v2.c3p0.impl.NewPooledConnection.fireConnectionClosed(NewPooledConnection.java:510)
    at com.mchange.v2.c3p0.impl.NewPooledConnection.markClosedProxyConnection(NewPooledConnection.java:381)
    at com.mchange.v2.c3p0.impl.NewProxyConnection.close(NewProxyConnection.java:1246)
    - locked <0x00007fa794ccf020> (a com.mchange.v2.c3p0.impl.NewProxyConnection)
    at org.springframework.orm.hibernate3.LocalDataSourceConnectionProvider.closeConnection(LocalDataSourceConnectionProvider.java:96)
    at org.hibernate.jdbc.ConnectionManager.closeConnection(ConnectionManager.java:474)
    at org.hibernate.jdbc.ConnectionManager.cleanup(ConnectionManager.java:408)
    at org.hibernate.jdbc.ConnectionManager.close(ConnectionManager.java:347)
    at org.hibernate.impl.SessionImpl.close(SessionImpl.java:325)
    at org.springframework.orm.hibernate3.SessionFactoryUtils.closeSession(SessionFactoryUtils.java:791)
    at org.springframework.orm.hibernate3.SessionFactoryUtils.closeSessionOrRegisterDeferredClose(SessionFactoryUtils.java:777)
    at org.springframework.orm.hibernate3.SessionFactoryUtils.releaseSession(SessionFactoryUtils.java:755)
Run Code Online (Sandbox Code Playgroud)

'我的堆栈跟踪转储显示此线程阻止了我的所有其他线程,锁定<0x00007fa7286d9728>,因此在一段时间内服务器被完全阻止.我不知道这个线程运行了多长时间,如果一个线程长时间阻塞所有其他线程,或者这个线程消耗的时间非常长,但结果是,我的系统被完全阻塞并且极其缓慢.我google了很多,但我不知道如何解决这个问题.我需要游泳池关闭连接并尽快完成胎面.我应该使用其他一些连接池吗?对我来说,绝对必要的是,这个池库是100%保存,没有死锁,生命周期,starvations,甚至它比其他库慢一点.

谢谢你的帮助

java database-connection connection-pooling c3p0 apache-commons-dbcp

6
推荐指数
1
解决办法
6181
查看次数

监控Commons DBCP?

我的Tomcat中的一个巨大的webapp有时会开始使用太多的DBCP连接,从而导致出现问题.
为了调查,我想准确地知道在每个时间点什么线程/方法持有池的连接.不需要实时,验尸分析也行.

我一直在寻找这样一个DBCP监控工具,徒劳无功,所以我要写我的.
(如果有任何兴趣,我可以把它作为开源)

这是我的计划:

DBCP监控

问题:
我是否遗漏了一些使这个想法无效的Commons-DBCP 1.4概念?
还是我重新发明轮子?

monitoring apache-commons-dbcp

6
推荐指数
1
解决办法
4809
查看次数

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

我试图更好地理解如果多个线程同时使用相同的JDBC连接尝试执行不同的sql查询将会发生什么.

  • 结果是否在功能上正确?

  • 性能影响是什么?

  • 线程A是否必须等待线程B完全完成其查询?

  • 或者线程A能够在线程B发送查询后立即发送其查询,之后数据库将并行执行两个查询?


我看到Apache DBCP使用同步协议来确保从池中删除从池中获取的连接,并使它们不可用,直到它们关闭.这似乎比它需要的更不方便.我正在考虑构建自己的"池",只需创建一个静态的打开连接列表,并以循环方式分发它们.我不介意偶尔的性能下降,并且在每次使用后不必关闭连接的便利性似乎非常吸引人.这样做有什么不好吗?

java database-connection connection-pooling jdbc apache-commons-dbcp

6
推荐指数
2
解决办法
5670
查看次数

如何在tomcat dbcp池中跟踪/记录连接,并检测不返回池连接的代码

在大型应用程序的某个地方,有一些代码不会像应该的那样返回到连接池的连接.结果是池快速达到最大连接.

这可以通过将其设置为删除已放弃的连接来解决,但会降低性能.

如何在tomcat dbcp中启用日志记录以显示何时借用和返回连接?

logging tomcat connection-pooling apache-commons-dbcp jdbc-pool

6
推荐指数
1
解决办法
1994
查看次数

使用JMX监视DBCP2连接池

我从DBCP2文档中读到这个新版本支持连接池的JMX监控,但我找不到任何显示实际用法的示例.

我有一个简单的基于JDBC的java应用程序,它使用dbcp2创建一个简单查询服务使用的连接池,我想通过另一个工具,如VisualVM使用JMX监视这些连接.DBCP2 BasicDataSource有像setJmxName() 这样的方法,我没有看到任何用法,也不知道如何使用它.

如果有人不熟悉JDBC,您可以在此处阅读.

任何有关这方面的帮助将不胜感激.谢谢!

java monitoring jmx apache-commons-dbcp

6
推荐指数
1
解决办法
3583
查看次数

当需要nativeJdbcExtractor时,Spring 5 JDBC方法是什么?

我刚刚升级了 Spring/SpringBoot 依赖项,并注意到 JdbcTemplate 类不再具有属性“nativeJdbcExtractor”。

\n\n

我能够找到详细信息和背景:\n https://jira.spring.io/browse/SPR-14670

\n\n

但是我无法找到替换配置。我使用 commons-dbcp 库和 Spring 类,如SimpleJdbcCall等。我从不处理低级 JDBC API,但是如果供应商代码需要其真正的连接类型(Oracle),nativeJdbcExtractor设置确保它将在 Spring JDBC 代码深处得到它(不是我的应用程序代码)。我\xc2\xb4m 不知道如何通过调用connection.unwrap()来解决这个问题,如果我需要Spring API 像过去那样自动处理这个问题。

\n\n

java.lang.ClassCastException:org.apache.commons.dbcp2.PoolingDataSource$PoolGuardConnectionWrapper 无法转换为 oracle.jdbc.OracleConnection

\n\n

它是否隐藏在数据源配置中的某处?我已从 commons-dbcp 1.4 升级到 commons-dbcp2,但到目前为止找不到任何有用的东西(BasicDataSource)。

\n\n

更新:以下线程相关,但我无法消化 I\xc2\xb4m 寻找的答案,因为 Connection 对象是在 JdbcTemplate 类中获得的,因此超出了我的控制范围。

\n\n

替换 jdbc.support.nativejdbc 在 Spring 5 中删除

\n\n

更新 #2 - 堆栈跟踪

\n\n
Caused by: java.lang.ClassCastException: org.apache.commons.dbcp2.PoolingDataSource$PoolGuardConnectionWrapper cannot be cast to oracle.jdbc.OracleConnection\nat oracle.sql.TypeDescriptor.setPhysicalConnectionOf(TypeDescriptor.java:832)\nat oracle.sql.TypeDescriptor.<init>(TypeDescriptor.java:586)\nat oracle.sql.ArrayDescriptor.<init>(ArrayDescriptor.java:224)\nat org.springframework.data.jdbc.support.oracle.SqlArrayValue.createTypeValue(SqlArrayValue.java:90)\nat org.springframework.jdbc.core.support.AbstractSqlTypeValue.setTypeValue(AbstractSqlTypeValue.java:60)\nat org.springframework.jdbc.core.StatementCreatorUtils.setValue(StatementCreatorUtils.java:293)\nat org.springframework.jdbc.core.StatementCreatorUtils.setParameterValueInternal(StatementCreatorUtils.java:232)\nat org.springframework.jdbc.core.StatementCreatorUtils.setParameterValue(StatementCreatorUtils.java:147)\nat org.springframework.jdbc.core.CallableStatementCreatorFactory$CallableStatementCreatorImpl.createCallableStatement(CallableStatementCreatorFactory.java:200)\nat org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:1048)\nat org.springframework.jdbc.core.JdbcTemplate.call(JdbcTemplate.java:1104)\nat …
Run Code Online (Sandbox Code Playgroud)

java jdbc spring-jdbc apache-commons-dbcp spring-boot

6
推荐指数
1
解决办法
9568
查看次数

使用MySQL在Tomcat上汇集PreparedStatement

将Tomcat与MySQL一起使用时,Tomcat DataSource配置(我相信来自DBCP)和Connector/J cachePrepStmts设置中的poolPreparedStatements设置之间的关系是什么?什么是最佳配置?

java mysql tomcat jdbc apache-commons-dbcp

5
推荐指数
1
解决办法
2879
查看次数