Hibernate operation: Cannot open connection; uncategorized SQLException for SQL [???]; SQL state [nu...

最近项目碰到如标题所示的异常,然后解决了,解决办法如下:

1.hibernate配置文件中增加:hibernate.connection.release_mode = after_statement

注意:hibernate.connection.release_mode: 指定Hibernate在何时释放JDBC连接. 默认情况下,直到Session被显式关闭或被断开连接时,才会释放JDBC连接. 对于应用程序服务器的JTA数据源, 你应当使用after_statement, 这样在每次JDBC调用后,都会主动的释放连接. 对于非JTA的连接, 使用after_transaction在每个事务结束时释放连接是合理的. auto将为JTA和CMT事务策略选择after_statement, 为JDBC事务策略选择after_transaction.

取值 on_close | after_transaction | after_statement | auto

2.在spring配置sessionFactory的hibernate相关属性配置行加入:

<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">${dataSource.dialect}</prop>
<prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
<prop key="hibernate.format_sql">${hibernate.format_sql}</prop>
<prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>
<prop key="hibernate.temp.use_jdbc_metadata_defaults">false</prop>
<!-- hibernate释放连接模式 -->
<prop key="hibernate.connection.release_mode">${hibernate.connection.release_mode}</prop>
</props>
</property>

3.然后再连接池(我用的是dpcp)数据源配置中加:

<!-- 配置dataSource 使用apache的dbcp数据源 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="${dataSource.driverClassName}" />
<property name="url" value="${dataSource.sjzk.url}" />
<property name="username" value="${dataSource.sjzk.username}" />
<property name="password" value="${dataSource.sjzk.password}" />
<property name="defaultAutoCommit" value="true"/>
<property name="initialSize" value="3" />
<property name="maxActive" value="300" />
<property name="maxIdle" value="50"/>
<property name="minIdle" value="1" />
<property name="maxWait" value="300" />
<!-- 为解决空连接超时问题 开始 -->
<!--removeAbandoned: 是否自动回收超时连接-->
<property name="removeAbandoned" value="true"/>
<!--removeAbandonedTimeout: 超时时间(以秒数为单位)-->
<property name="removeAbandonedTimeout" value="180"/>
<!-- 在空闲连接回收器执行周期(毫秒) -->
<property name="timeBetweenEvictionRunsMillis" value="10000"/>
<!-- 在每次空闲连接回收器线程(如果有)运行时检查的连接数量 -->
<property name="numTestsPerEvictionRun" value="10"/>
<!-- 最小空闲时间-->
<property name="minEvictableIdleTimeMillis" value="10000"/>
<!-- 为解决空连接超时问题 结束 -->
</bean>

通过以上3处修改配置文件,重新发布,问题解决!

转载于:https://www.cnblogs.com/bkyzgb/p/9414798.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值