环境
hibernate 4.2.0.Final
spring 3.2.0.RELEASE
druid 1.0.2
异常信息
Caused by: org.hibernate.exception.GenericJDBCException: Could not open connection
Caused by: com.alibaba.druid.pool.GetConnectionTimeoutException: wait millis 60000, active 20
[WARN] 09-24 14:11:29 [pool.DruidDataSource.recycle:1132] get/close not same thread
现象分析,20个连接都用完后,就拿不到新连接,查不出数据了
网上查了下
http://www.oschina.net/question/1170760_127675 这里面的描述最像
“kalo回复 @千纸鹤 : 是因为我用了Tomcat7,并且Spring里面使用了异步机制。造成了durid连接池打开关闭不是同一线程。 去掉spring对异步的支持,就不会出现这个问题。你可以在Tomcat6里面试试。 具体为什么 异步会造成durid连接池打开关闭不是同一线程,我也不清楚,还在研究。”
这个和tomcat无关,tomcat6一样会出现。
解决方法
在spring的sessionFactory的配置中 <property name="hibernateProperties"> 加上
<prop key="hibernate.connection.release_mode">AFTER_TRANSACTION</prop>
问题就解决了。
相关推荐
2. **Open() 和 Close()**:`Open()`方法从连接池获取连接,`Close()`方法不实际关闭连接,而是将其返回到连接池。 3. **ConnectionString属性**:在连接字符串中,可以设置`Pooling=true`来启用连接池,还可以通过...
3. **获取连接**:提供一个公共方法,如getConnection(),从连接池中获取一个连接。这个方法应处理获取连接的异常,并确保返回的连接有效。 4. **关闭连接**:当不再需要连接时,调用连接的close()方法。但不应直接...
- 获取和释放连接:通过数据源对象的getConnection()方法获取连接,使用完毕后调用Connection的close()方法,实际上将连接返回给连接池,而非真正关闭。 4. **连接池的优缺点** 优点: - 资源复用,提高性能。 ...
Jedis连接池是优化资源管理的关键,它允许开发者预先创建并复用连接,避免频繁的连接创建和关闭,提高系统效率。在Java中,我们可以使用Apache Commons Pool2库来实现Jedis连接池。以下是一个简单的Jedis连接池配置...
6. 关闭连接池:在程序结束时,记得调用`clear()`和`close()`方法,清理并关闭所有连接。 在提供的文件列表中,"ftp-test"可能是测试FTP连接池功能的代码或脚本。这个测试可能包括创建连接池、执行FTP操作(如上传...
在Java开发中,连接池是一种优化数据库访问性能的重要技术,它可以高效地管理和重用数据库连接,从而避免频繁创建和销毁连接带来的性能开销。本文将深入讲解如何在Java环境中,特别是Tomcat服务器中配置和使用连接池...
通常,它会包含如getConnection()和returnConnection()这样的方法,前者用于获取连接,后者用于归还连接到池中。 再者,"DBUtils.java"可能是数据库操作的辅助工具类,包含了一些常用的数据操作函数,如执行SQL语句...
3. **连接池管理**:连接池需要监控连接的状态,确保连接的有效性,当检测到连接异常时,会自动移除并重新创建新的连接。 4. **连接扩展**:当连接池中的连接被全部占用时,如果请求量持续增加,连接池可能会根据...
Tomcat 连接池和阿里 Druid 连接池的配置和比较 Tomcat 连接池是一种基于 Java 的数据库连接池实现,提供了高效、可靠的数据库连接管理。阿里 Druid 连接池是阿里巴巴开发的开源连接池,提供了高性能、可靠的数据库...
数据库连接池是一种资源管理技术,它预先创建并维护一定数量的数据库连接,当应用需要时,可以从池中获取连接,使用完毕后归还而不是直接关闭,从而减少了频繁创建和销毁连接的开销。在.NET Core中,对于MySQL数据库...
连接池的基本思想是预先创建一定数量的数据库连接,存储在一个池中,当应用程序需要数据库连接时,可以从池中获取一个,使用完毕后不是立即关闭,而是将其归还给连接池,以便后续请求可以复用。这样避免了频繁创建...
`getConnection()`方法负责从池中获取连接,如果池中没有空闲连接且总连接数未达到最大值,就创建新的连接;`returnConnection()`方法用于归还连接,同时检查连接是否合法,防止重复归还。`cleanUp()`方法定期清理...
在企业级Java应用程序开发中,使用连接池管理数据库连接是一种常见的优化策略,它能有效提高系统性能并降低资源消耗。Tongweb5是一款基于Java的Web应用服务器,它支持配置JDBC连接池来管理数据库连接。本文将详细...
数据库连接池是Java开发中非常重要的一个概念,它在处理大量并发访问时能显著提高数据库操作的性能。本文将深入探讨数据库连接池的工作原理、重要性以及如何在Java中实现和使用连接池。 首先,我们需要理解数据库...
数据库连接池是数据库管理中的重要概念,特别是在高并发和大数据量的应用场景下,它能显著提升性能并降低系统资源消耗。在C#编程环境中,我们可以使用自定义的数据库连接池来实现这一功能。本篇文章将深入探讨“C#...
注意,即使在finally块中,我们也应该确保连接被正确关闭,但实际中,由于使用了连接池,`conn.close()`并不会真正关闭连接,而是将其返回给连接池,供后续请求复用。 总的来说,数据库连接池是优化数据库访问的...
1. `GetConnection()`: 当需要连接时,此方法会检查池中是否有空闲的连接。如果有,就从池中取出并返回;如果没有,就创建一个新的连接并返回。 2. `ReturnConnection(MySqlConnection conn)`: 当操作完成时,调用...
操作完成后,使用Connection的close()方法将连接返回给连接池,而不是真正关闭连接。 5. 关闭连接池:当应用程序结束时,确保调用DataSource的shutdown()方法,安全地关闭所有连接并释放资源。 使用jTDS连接池的...