我是春天的新手,还在学习.我在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代码没有出现.抱歉.
我使用带有Hikari连接池、jpa 和 postgres 的spring boot 2 。
是否有任何理由继续使用这些选项
spring.datasource.testOnBorrow=true
spring.datasource.validationQuery=SELECT 1
spring.datasource.testWhileIdle
Run Code Online (Sandbox Code Playgroud) 有人可以解释如何使用dbcp准确准备连接池吗?(如果可能,请使用一些示例代码).我已经想出如何打开它 - 将KeyedObjectPoolFactory传递给PoolableConnectionFactory.但是之后应该如何定义具体的准备陈述呢?现在我只使用PoolingDataSource从池中获取连接.如何使用池中的预准备语句?
java connection-pooling prepared-statement apache-commons-dbcp
我使用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
我的Tomcat中的一个巨大的webapp有时会开始使用太多的DBCP连接,从而导致出现问题.
为了调查,我想准确地知道在每个时间点什么线程/方法持有池的连接.不需要实时,验尸分析也行.
我一直在寻找这样一个DBCP监控工具,徒劳无功,所以我要写我的.
(如果有任何兴趣,我可以把它作为开源)
这是我的计划:
DBCP+1 <thread-id>"DBCP-1 <thread-id>"
问题:
我是否遗漏了一些使这个想法无效的Commons-DBCP 1.4概念?
还是我重新发明轮子?
我试图更好地理解如果多个线程同时使用相同的JDBC连接尝试执行不同的sql查询将会发生什么.
结果是否在功能上正确?
性能影响是什么?
线程A是否必须等待线程B完全完成其查询?
或者线程A能够在线程B发送查询后立即发送其查询,之后数据库将并行执行两个查询?
我看到Apache DBCP使用同步协议来确保从池中删除从池中获取的连接,并使它们不可用,直到它们关闭.这似乎比它需要的更不方便.我正在考虑构建自己的"池",只需创建一个静态的打开连接列表,并以循环方式分发它们.我不介意偶尔的性能下降,并且在每次使用后不必关闭连接的便利性似乎非常吸引人.这样做有什么不好吗?
java database-connection connection-pooling jdbc apache-commons-dbcp
在大型应用程序的某个地方,有一些代码不会像应该的那样返回到连接池的连接.结果是池快速达到最大连接.
这可以通过将其设置为删除已放弃的连接来解决,但会降低性能.
如何在tomcat dbcp中启用日志记录以显示何时借用和返回连接?
logging tomcat connection-pooling apache-commons-dbcp jdbc-pool
我从DBCP2文档中读到这个新版本支持连接池的JMX监控,但我找不到任何显示实际用法的示例.
我有一个简单的基于JDBC的java应用程序,它使用dbcp2创建一个简单查询服务使用的连接池,我想通过另一个工具,如VisualVM使用JMX监视这些连接.DBCP2 BasicDataSource有像setJmxName()
这样的方法,我没有看到任何用法,也不知道如何使用它.
如果有人不熟悉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\njava.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\nCaused 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) 将Tomcat与MySQL一起使用时,Tomcat DataSource配置(我相信来自DBCP)和Connector/J cachePrepStmts设置中的poolPreparedStatements设置之间的关系是什么?什么是最佳配置?
java ×6
jdbc ×3
monitoring ×2
spring ×2
spring-boot ×2
tomcat ×2
apache ×1
c3p0 ×1
datasource ×1
hikaricp ×1
jar ×1
jdbc-pool ×1
jmx ×1
logging ×1
mysql ×1
spring-jdbc ×1