ssh框架 Could not commit Hibernate transaction问题

long298 2009-05-05 10:40:25
我的tomcat服务器开了不到一天 就报如下错误
org.apache.jasper.JasperException: Could not commit Hibernate transaction; nested exception is org.hibernate.TransactionException: JDBC commit failed
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:476)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:371)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:315)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:78)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:77)
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:174)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:77)

重启一下tomcat就好了,在网上查了半天,说是mysql自动关闭问题,可是我的mysql并没关闭,而且我把mysql的wait_timeout设为88888888了,可是tomcat运行了不到一天又报上面的错了,又得重启一下tomcat才行,请教各位高手们是不是我的ssh整合中存在某种缺陷?请大家帮忙解决呀
...全文
1339 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
long298 2009-05-09
  • 打赏
  • 举报
回复
连接池用了 暂时还没什么问题 谢谢各位了
wuzhongxing 2009-05-05
  • 打赏
  • 举报
回复
错误提示太少了,不太好判断。
从情形上分析,是否是资源没有及时清理,耗尽了。
jinxfei 2009-05-05
  • 打赏
  • 举报
回复
应该就是mysql的自动断开链接导致的,网上有不少人讨论这个问题,

不知道你有没有用连接池,
可以配置一个连接池,通过设置连接池参数,自动保持数据库链接可用。

或者你自己写一个线程,每隔一个小时,用connection干点活。

long298 2009-05-05
  • 打赏
  • 举报
回复
非常感谢楼上的
试了下 设置my.ini中的wait_timeout=120 没加连接池时等了半天就是不报错 感觉wait_timeout没起作用呀 让人不好调试呀 不知连接池到底有效没 只能等呀 看以后报错不 心底还是很没底呀
jinxfei 2009-05-05
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 long298 的回复:]
我应该没用连接池,我的ssh配置如下:

spring部分配置文件applicationContext-common.xml:
<!-- 配置sessionFactory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation" value="classpath:hibernate.cfg.xml"/>
</bean>

<!-- 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.Hiber…
[/Quote]

定时重启tomcat,呵呵,有点夸张,
连接池你可以找一下c3p0的文档,
它里面有个属性,可以帮你定期探测链接状态:

这里有个人,碰到的问题跟你一样,不过他通过调整c3p0的参数解决了:
http://www.codefin.net/2007/05/hibernate-and-mysql-connection-timeouts.html

英文的。
long298 2009-05-05
  • 打赏
  • 举报
回复
我应该没用连接池,我的ssh配置如下:

spring部分配置文件applicationContext-common.xml:
<!-- 配置sessionFactory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation" value="classpath:hibernate.cfg.xml"/>
</bean>

<!-- 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>

<!-- 配置事务的传播特性 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="*" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice>

<!-- 哪些类哪些方法参与事务 -->
<aop:config>
<aop:pointcut id="pcut" expression="execution(* com.lon.business.manager.*.*(..))"/>
<aop:advisor pointcut-ref="pcut" advice-ref="txAdvice"/>
</aop:config>
其它bean都是如下这样配置的:
<bean id="userManager" class="com.lon.business.manager.impl.UserManagerImpl">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>

hibenate的配置:
<property name="hibernate.connection.url">jdbc:mysql://localhost/srtc</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">1234</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>

web.xml中添加了个spring的过滤器,如下:
<filter>
<filter-name>hibernateFilter</filter-name>
<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>hibernateFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
报错中就有OpenSessionInViewFilter的错

谢谢楼上们的关注,因为那个网上已经挂上了,我先弄了个定时重启tomcat的脚本勉强撑下,但这不是根本的解决方法呀,希望得到高手们的指教。小弟万分感谢呀
我没用过连接池,用连接池就没这种情况了吗?请问在哪配置呀?
mumu_java 2009-05-05
  • 打赏
  • 举报
回复
用连接池。
  • 打赏
  • 举报
回复
若是修改mysql默认关闭连接时间还不行的话
可能是Mysql和连接池的问题
建议你更换连接池 ,试试
关注ing
Landor2004 2009-05-05
  • 打赏
  • 举报
回复
wait_timeout = 88888888
interactive_timeout = 88888888

50,530

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧