首次登录时无法打开Hibernate Session进行交易

我有一个运行Spring Security的完整操作Spring Mvc应用程序,但是每当服务器暂时没有激活并且有人试图登录时,我都会收到以下错误:

HTTP状态500 – 请求处理失败; 嵌套exception是org.springframework.transaction.CannotCreateTransactionException:无法打开Hibernate Session进行事务处理; 嵌套exception是org.hibernate.TransactionException:JDBC开始事务失败

有时(约5秒钟后)它开始正常工作。

我搜索并找到了这个链接: http : //forum.spring.io/forum/spring-projects/data/13298-could-not-open-hibernate-session-for-transaction-jdbc-begin-failed但我不知道我知道如何“在连接池配置中配置连接测试”。

任何建议?

编辑:

我找到了以下链接来设置配置池:

http://www.codingpedia.org/ama/tomcat-jdbc-connection-pool-configuration-for-production-and-development/

所以我试图在我的数据源中实现它:

            

但我最终在validationInterval上收到错误说:

在此行找到多个注释: – 在类’org.apache.commons.dbcp.BasicDataSource’中找不到属性’validationInterval’的setter’

如果没有堆栈跟踪,很难确定,但您最有可能处理过期的数据库连接。 Hibernate无法为您启动事务,因为它尝试运行的第一个语句(“START TRANSACTION – 通过JDBC”)失败。再次,我认为因为底层数据库连接在此期间失效了

这可能由于各种原因而发生:

  • 数据库设置(最有可能)
  • 网络/防火墙
  • 当地环境等

无论来源如何,您都可以选择确保不会发生这种情况。 如果您使用的是JDBC池(如Tomcat JDBC池 ),则可以配置池以在必要时测试并重新打开连接。 例如,testOnBorrow设置将指示池在实际将其提供给应用程序以供使用之前不断测试数据库连接。 您可以微调这些设置以消除与性能相关的问题。

附加信息

您正在尝试实现池精细,但您获得了变量名称:validationInterval错误。

您收到该错误,因为BasicDataSource没有这样的变量,因此Spring无法设置该属性。 查看BasicDataSource( 链接 )的javadoc以查看可用的配置变量。 validationInterval变量可以应用于tomcat池实现(我上面提到的),你选择的那个没有这个function。

更换

      

有了这个:

    

我的编辑的答案是在我的bean中添加以下内容,其中包含连接数据:

       

我不知道为什么,但@PawełGłowacz的回答对我不起作用。 谢谢你的帮助