我有一个java客户端服务器,它应该在启动时建立连接池,但它的超时错误失败.在同一个问题上有很多线程,但没有一个解决方案适合我AM使用jdk 7及以下版本是mchange maven依赖项dependencygroupIdcom.mchange/group...
我有一个java客户端服务器,它应该在启动时建立连接池,但它的超时错误失败.在同一个问题上有很多线程,但没有一个解决方案适合我
AM使用jdk 7及以下版本是mchange maven依赖项
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.2.1</version>
</dependency>
jdbc.properties
url=jdbc\:sqlserver\://server\\instance;databaseName\=db
driver=com.microsoft.sqlserver.jdbc.SQLServerDriver
user=admin
password=admin
maxPoolSize=20
minPoolSize=5
acquireIncrement=5
这是我的DAO类,它在服务器启动时建立连接池
public class ShareDocDAO {
//..........
private static Connection getConnection() throws SQLException {
LOG.info("Getting DB connection");
ComboPooledDataSource cpds = getPool();
return cpds.getConnection(); //Line 36:
}
private static ComboPooledDataSource getPool() {
if (pool!=null) {
return pool;
}
ComboPooledDataSource cpds = new ComboPooledDataSource();
try {
Properties dbProperties = getDbProperties();
//loads the jdbc driver
cpds.setDriverClass(dbProperties.getProperty("driver"));
cpds.setJdbcUrl(dbProperties.getProperty("url"));
cpds.setUser(dbProperties.getProperty("user"));
cpds.setPassword(dbProperties.getProperty("password"));
// the settings below are optional -- c3p0 can work with defaults
cpds.setMinPoolSize(Integer.valueOf(dbProperties.getProperty("minPoolSize")));
cpds.setAcquireIncrement(Integer.valueOf(dbProperties.getProperty("acquireIncrement")));
cpds.setMaxPoolSize(Integer.valueOf(dbProperties.getProperty("maxPoolSize")));
cpds.setCheckoutTimeout(30000);
cpds.setIdleConnectionTestPeriod(10800);
cpds.setMaxIdleTime(21600);
LOG.info("cpds driver "+cpds.getDriverClass()+ " JDBC URL = "+cpds.getJdbcUrl() +" User = "+cpds.getUser()+ " Pwd = "+cpds.getPassword()+ " MinPoolSize "+cpds.getMinPoolSize() +" AcquireIncrement "+cpds.getAcquireIncrement() +" MaxPoolSize "+cpds.getMaxPoolSize());
} catch (Exception ex) {
LOG.error("failed to create pool", ex);
}
pool = cpds;
return pool;
}
}
这是堆栈跟踪
[Oct 29 11:58:22] SSLHandshake-3 | ERROR | com.dc.ssltunnel.server.ShareDocDAO | Error querying for User Information
java.sql.SQLException: An attempt by a client to checkout a Connection has timed out.
at com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:118)
at com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:77)
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:687)
at com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource.getConnection(AbstractPoolBackedDataSource.java:140)
at com.dc.ssltunnel.server.ShareDocDAO.getConnection(ShareDocDAO.java:36)
at com.dc.ssltunnel.server.ShareDocDAO.checkSerialNumber(ShareDocDAO.java:75)
at com.dc.ssltunnel.server.MainServer.retrieveOrCreateClient(MainServer.java:95)
at com.dc.ssltunnel.server.MainServerHandshakeThread.handshake(MainServerHandshakeThread.java:58)
at com.dc.ssltunnel.server.MainServerHandshakeThread.run(MainServerHandshakeThread.java:71)
at com.dc.ssltunnel.utilities.threading.ShutdownThreadPoolExecutor$1.run(ShutdownThreadPoolExecutor.java:36)
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: com.mchange.v2.resourcepool.TimeoutException: A client timed out while waiting to acquire a resource from com.mchange.v2.resourcepool.BasicResourcePool@3414b7f8 -- timeout at awaitAvailable()
at com.mchange.v2.resourcepool.BasicResourcePool.awaitAvailable(BasicResourcePool.java:1416)
at com.mchange.v2.resourcepool.BasicResourcePool.prelimCheckoutResource(BasicResourcePool.java:606)
at com.mchange.v2.resourcepool.BasicResourcePool.checkoutResource(BasicResourcePool.java:526)
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutAndMarkConnectionInUse(C3P0PooledConnectionPool.java:755)
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:682)
... 12 more
[Oct 29 11:58:22] SSLHandshake-3 | DEBUG | com.dc.ssltunnel.server.MainServerHandshakeThread | Handshake thread is done
[Oct 29 11:58:22] SSLHandshake-3 | DEBUG | com.dc.ssltunnel.server.MainServerHandshakeThread | Handshake thread is done
[Oct 29 11:58:22] SSLHandshake-1 | INFO | com.dc.ssltunnel.server.ShareDocDAO | Getting DB connection
[Oct 29 11:58:22] SSLHandshake-1 | INFO | com.dc.ssltunnel.server.ShareDocDAO | Getting DB connection
[Oct 29 11:58:22] SSLHandshake-3 | DEBUG | com.dc.ssltunnel.utilities.threading.ShutdownThreadPoolExecutor | RUNNABLE:removing total:2
[Oct 29 11:58:22] SSLHandshake-3 | DEBUG | com.dc.ssltunnel.utilities.threading.ShutdownThreadPoolExecutor | RUNNABLE:removing total:2
[Oct 29 11:58:22] SSLHandshake-1 | ERROR | com.dc.ssltunnel.server.ShareDocDAO | Error querying for User Information
java.sql.SQLException: Connections could not be acquired from the underlying database!
at com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:118)
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:689)
at com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource.getConnection(AbstractPoolBackedDataSource.java:140)
at com.dc.ssltunnel.server.ShareDocDAO.getConnection(ShareDocDAO.java:36)
at com.dc.ssltunnel.server.ShareDocDAO.checkSerialNumber(ShareDocDAO.java:75)
at com.dc.ssltunnel.server.MainServer.retrieveOrCreateClient(MainServer.java:95)
at com.dc.ssltunnel.server.MainServerHandshakeThread.handshake(MainServerHandshakeThread.java:58)
at com.dc.ssltunnel.server.MainServerHandshakeThread.run(MainServerHandshakeThread.java:71)
at com.dc.ssltunnel.utilities.threading.ShutdownThreadPoolExecutor$1.run(ShutdownThreadPoolExecutor.java:36)
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: com.mchange.v2.resourcepool.CannotAcquireResourceException: A ResourcePool could not acquire a resource from its primary factory or source.
at com.mchange.v2.resourcepool.BasicResourcePool.awaitAvailable(BasicResourcePool.java:1418)
at com.mchange.v2.resourcepool.BasicResourcePool.prelimCheckoutResource(BasicResourcePool.java:606)
at com.mchange.v2.resourcepool.BasicResourcePool.checkoutResource(BasicResourcePool.java:526)
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutAndMarkConnectionInUse(C3P0PooledConnectionPool.java:755)
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:682)
... 12 more
有人可以帮我解释我的配置/代码有什么问题吗?
解决方法:
问题是一般的
Transaction.Begin()不是直接或间接调用的.
所以这可能是会话,SessionFactory或配置的问题
您可以随时通过对会话对象执行查询来调试此操作,如果该测试查询有效,则向其添加事务并适当地begin(),commit()
沃梦达教程
本文标题为:java.sql.SQLException:客户端检出Connection的尝试已超时
基础教程推荐
猜你喜欢
- 使用JSP技术实现一个简单的在线测试系统的实例详解 2023-07-30
- java如何实现抽取json文件指定字段值 2023-01-09
- IDEA中sout快捷键无效问题的解决方法 2023-03-15
- Java 热更新 Groovy 实践及踩坑指南(推荐) 2023-05-18
- RocketMQ Push 消费模型示例详解 2023-05-24
- Go Java算法之从英文中重建数字示例详解 2023-04-06
- java中复杂查询sql语句该怎么写 2023-06-30
- SpringBoot测试配置属性与web启动环境超详细图解 2023-06-17
- IDEA中的yml文件与properties互相转换 2023-06-24
- 基于Springboot的高校社团管理系统的设计与实现 2023-03-21