在系统监控controller调用service把数据入库时,报了该异常:
最终确定是因为数据链接自动关闭,而不是spring和hibernate的问题。
解决办法是:打开数据库的重连接。
在sessionFactory里配置:
在资源文件中加入:
经过多次长时间的测试,已经不再报该异常了
- ERROR [Timer-2] timer.SystemMonitoringTimer (SystemMonitoringTimer.java:92) - blingtel oops, got an exception:
- org.springframework.transaction.CannotCreateTransactionException: Could not open Hibernate Session for transaction; nested exception is org.hibernate.service.UnknownServiceException: Unknown service requested [org.hibernate.service.jdbc.connections.spi.ConnectionProvider]
- at org.springframework.orm.hibernate4.HibernateTransactionManager.doBegin(HibernateTransactionManager.java:440)
- at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:371)
- at org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:335)
- at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:105)
- at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
- at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:90)
- at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
- at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
- at $Proxy27.save(Unknown Source)
- at com.blingtel.oam.systemmonitoring.timer.SystemMonitoringTimer.run(SystemMonitoringTimer.java:88)
- at java.util.TimerThread.mainLoop(Timer.java:512)
- at java.util.TimerThread.run(Timer.java:462)
- Caused by: org.hibernate.service.UnknownServiceException: Unknown service requested [org.hibernate.service.jdbc.connections.spi.ConnectionProvider]
- at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:126)
- at org.hibernate.internal.AbstractSessionImpl.getJdbcConnectionAccess(AbstractSessionImpl.java:255)
- at org.hibernate.engine.jdbc.internal.JdbcCoordinatorImpl.<init>(JdbcCoordinatorImpl.java:75)
- at org.hibernate.engine.transaction.internal.TransactionCoordinatorImpl.<init>(TransactionCoordinatorImpl.java:87)
- at org.hibernate.internal.SessionImpl.<init>(SessionImpl.java:237)
- at org.hibernate.internal.SessionFactoryImpl$SessionBuilderImpl.openSession(SessionFactoryImpl.java:1801)
- at org.hibernate.internal.SessionFactoryImpl.openSession(SessionFactoryImpl.java:1009)
- at sun.reflect.GeneratedMethodAccessor56.invoke(Unknown Source)
- at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
- at java.lang.reflect.Method.invoke(Method.java:597)
- at org.springframework.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:191)
- at org.springframework.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:176)
- at org.springframework.orm.hibernate4.SessionFactoryUtils.openSession(SessionFactoryUtils.java:114)
- at org.springframework.orm.hibernate4.HibernateTransactionManager.doBegin(HibernateTransactionManager.java:340)
- ... 11 more
最终确定是因为数据链接自动关闭,而不是spring和hibernate的问题。
解决办法是:打开数据库的重连接。
在sessionFactory里配置:
- <prop key="hibernate.autoReconnect">${hibernate.autoReconnect}</prop>
在资源文件中加入:
- hibernate.autoReconnect=true
经过多次长时间的测试,已经不再报该异常了