我有一个运行完整的Spring MVC应用程序,运行Spring Security,但每当服务器有一段时间不活动,有人试图登录时,我就会出现以下错误:
HTTP状态500-请求处理失败;嵌套的异常是org。springframework。交易CannotCreateTransactionException:无法为事务打开Hibernate会话;嵌套的异常是org。冬眠TransactionException:JDBC begin事务失败
有时(大约5秒后)它开始正常工作。
我搜索并找到了这个链接,但我不知道如何在连接池配置中配置连接测试。
有什么建议吗?
编辑:
我找到这个链接来设置配置池,所以我尝试在我的数据源中实现它:
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://192.168.254.45:3306/7jogos" />
<property name="password" value="..." />
<property name="username" value="..." />
<!-- Configuration pool -->
<property name="validationQuery" value="SELECT 1" />
<property name="validationInterval" value="34000" />
<property name="testOnBorrow" value="true" />
<property name="removeAbandoned" value="true" />
<property name="removeAbandonedTimeout" value="55" />
</bean>
但我在
validationInterval
上最终得到一个错误,说:
在此行中找到多个批注:-在类“org”中未找到属性“validationInterval”的setter。阿帕奇。平民dbcp。基本数据源'
答案在我的编辑中,即在我的bean中添加以下具有连接数据的内容:
<!-- Configuration pool -->
<property name="validationQuery" value="SELECT 1" />
<property name="validationInterval" value="34000" />
<property name="testOnBorrow" value="true" />
<property name="removeAbandoned" value="true" />
<property name="removeAbandonedTimeout" value="55" />
我不知道为什么,但是@Pawegóowacz的回答对我不起作用。谢谢你们的帮助伙计们
代替
<property name="validationQuery" value="SELECT 1" />
<property name="validationInterval" value="34000" />
<property name="testOnBorrow" value="true" />
<property name="removeAbandoned" value="true" />
<property name="removeAbandonedTimeout" value="55" />
有了这个:
<property name="initialSize" value="10" />
<property name="maxActive" value="5" />
<property name="maxWait" value="5000" />
如果没有stacktrace,很难确定,但您很可能正在处理过期的DB连接。Hibernate无法为您启动事务,因为它尝试运行的第一条语句(“start transaction-via JDBC”)失败。
由于各种原因,这可能会发生:
不管来源如何,您都可以选择确保这种情况不会发生。如果使用JDBC池(如Tomcat JDBC池),则可以配置该池以测试并在必要时重新打开连接。例如,testOnBrow设置将指示池在实际将db连接提供给应用程序使用之前不断测试db连接。您可以微调这些设置,以消除与性能相关的问题。
其他信息
您试图实现池,但变量名validationInterval搞错了。
之所以会出现这种错误,是因为BasicDataSource没有这样一个名为的变量,所以Spring无法设置该属性。查看BasicDataSource(链接)的javadoc,看看有哪些配置变量可供您使用。validationInterval变量可以应用于tomcat池实现(我在上面建议的),您选择的那个没有这个功能。
Spring MVC+Hibernate、JavaConfig WebAppConfig: 用户 HTTP状态500-请求处理失败;嵌套异常为org.springframework.transaction.CanNotCreateTransactionException:无法打开事务的Hibernate会话;嵌套异常为java.lang.NoClassDefoundError:org/hibern
有关您编写的代码问题的问题必须描述特定问题-并且在问题本身中包含有效代码以重现它。有关指导,请参阅SSCCE. org。 在我的应用程序中,我有一个模块,用于在数据库中搜索用户并在jsp内的表中显示他们的信息。我只是在应用程序中设置了Spring Security性。我能够从登录页面连接到数据库,尽管出于某种原因,DAO的CRUD操作(在本例中是搜索)都不起作用。 谢谢,如果我能提供更多信息,请告
我不熟悉SpringMVC和Hibernate。尝试使用SpringMVC(4.0.3)、Hibernate(4.3.5)和MySQL作为后端创建一个测试web应用程序。 连接到DB没有问题,因为我尝试使用简单的JDBC连接语句从示例testJavaClass中的同一个DB中获取数据,并且能够获取记录。 错误日志: 这是我的pom。xml: Eclipse中的项目结构: servlet上下文。xm
错误日志: 冬眠图。JAVA 测试类CategoryTestCase。JAVA 为什么我无法为事务打开Hibernate会话;嵌套异常,似乎一切都很好,为什么我得到这个错误你也可以检查git Hub代码它的相同问题,请帮助我解决这个问题https://github.com/rustyamigo/online-shopping
HibernateConfig CategoryDAOImpl 类别 类别测试类 获取此错误 为什么我得到嵌套异常 无法打开事务的Hibernate会话 似乎一切都很好,为什么会出现这个错误? 您也可以检查github代码
问题内容: 这些方法之间有什么区别,哪种更好?到现在为止,我的代码如下: 但是在运行上述代码时,记录并不总是被删除(精确地:id = 1永远不会被删除,而其他id总是被删除)。我读到保持打开的会话可以稍微加快应用程序的速度- 这就是为什么我要共享会话对象。我的业务对象通过DI获取会话工厂: 问题答案: 根据我在Hibernate的经验,得出的结论是,最好的策略是使Hibernate会话寿命与单个事