Hibernate易忘记配置release_mode
一个项目,启动tomcat服务器后,页面刷新第三次就出现等待服务器状态,并且一直等待下去(不报错)
使用Hibernate时,大家一般都记住了配置基本的那些选项,比如方言,缓存等,但是有一项配置卻很容易忘掉,这就是连接释放模式:hibernate.connection.release_mode
可有三个选择:after_statement/after_transaction/on_close,javadoc中可以看出它们的用处,注意的一点是,如果不配置,默认是on_close,那么如果沒有显示的去调用session.close或其它关闭连接的方法的话,这个连接时不会被关闭的!在用到连接池的時候,就更会出现问题了,池中的连接会一直存在着而不会被关闭和回收!
从log4j打印出来的日志也可以看出來,如果是on_close模式,从:
transaction completed on session with on_close connection release mode; be sure to close the session to release JDBC resources!
具体的一些细节可以看看hibernate的源代码,涉及到的两个行为:
org.hibernate.ConnectionReleaseMode
org.hibernate.jdbc.ConnectionManager最后,配置的代码为: <prop key="hibernate.connection.release_mode">after_transaction</prop>