Spring boot Spring启动@事务(超时=1)

Spring boot Spring启动@事务(超时=1),spring-boot,transactions,spring-data-jpa,Spring Boot,Transactions,Spring Data Jpa,我正在使用spring boot 1.5.6中的spring boot starter数据jpa 例如,当事务超时大于1时,一切正常 @Transaction(timeout=2)、@Transaction(timeout=5)或@Transaction(timeout=10), 但当我将其设置为@Transaction(timeout=1)时,它会在不到一秒钟的时间内抛出一个异常。下面是我的代码的快照: @Transactional(readOnly=true) 公共接口IUserReposi

我正在使用spring boot 1.5.6中的
spring boot starter数据jpa

例如,当事务超时大于1时,一切正常
@Transaction(timeout=2)
@Transaction(timeout=5)
@Transaction(timeout=10)
, 但当我将其设置为
@Transaction(timeout=1)
时,它会在不到一秒钟的时间内抛出一个异常。下面是我的代码的快照:

@Transactional(readOnly=true)
公共接口IUserRepository扩展了Crudepository{
@事务(超时=1)
Iterable findAll();
例外情况是:

15:18:11.078[http-nio-9999-exec-2]错误[o.a.c.c.[dispatcherServlet]:181]-路径为[/springJPA LOCAL]的上下文中的Servlet[dispatcherServlet]的Servlet.service()引发异常[请求处理失败;嵌套异常为org.springframework.orm.jpa.JpaSystemException:嵌套异常为javax.persistence.PersistenceException],根本原因为
javax.persistence.PersistenceException:null
位于org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1692)
位于org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1602)
位于org.hibernate.jpa.internal.QueryImpl.getResultList(QueryImpl.java:492)
位于org.hibernate.jpa.criteria.compile.CriteriaQueryTypeQueryAdapter.getResultList(CriteriaQueryTypeQueryAdapter.java:50)
位于org.springframework.data.jpa.repository.support.simplejperparepository.findAll(SimpleJpaRepository.java:329)
位于org.springframework.data.jpa.repository.support.SimpleJpaRepository.findAll(SimpleJpaRepository.java:74)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中
位于java.lang.reflect.Method.invoke(Method.java:498)
位于org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.executeMethodOn(RepositoryFactorySupport.java:504)
位于org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.doInvoke(RepositoryFactorySupport.java:489)
位于org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.invoke(RepositoryFactorySupport.java:461)
在org.springframework.aop.framework.ReflectiveMethodInvocation.procedue(ReflectiveMethodInvocation.java:179)上
位于org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:56)
在org.springframework.aop.framework.ReflectiveMethodInvocation.procedue(ReflectiveMethodInvocation.java:179)上
位于org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99)
位于org.springframework.transaction.interceptor.TransactionSpectSupport.invokeWithinTransaction(TransactionSpectSupport.java:282)
位于org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
在org.springframework.aop.framework.ReflectiveMethodInvocation.procedue(ReflectiveMethodInvocation.java:179)上
位于org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:136)
在org.springframework.aop.framework.ReflectiveMethodInvocation.procedue(ReflectiveMethodInvocation.java:179)上
位于org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:133)
在org.springframework.aop.framework.ReflectiveMethodInvocation.procedue(ReflectiveMethodInvocation.java:179)上
位于org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)
在org.springframework.aop.framework.ReflectiveMethodInvocation.procedue(ReflectiveMethodInvocation.java:179)上
位于org.springframework.data.repository.core.support.SurroundingTransactionDetectorMethodInterceptor.invoke(SurroundingTransactionDetectorMethodInterceptor.java:57)
在org.springframework.aop.framework.ReflectiveMethodInvocation.procedue(ReflectiveMethodInvocation.java:179)上
位于org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:213)
位于com.sun.proxy.$Proxy198.findAll(未知来源)
位于com.dharam.springJPA.service.impl.UserServiceImpl.doFindAll(UserServiceImpl.java:29)
位于com.dharam.springJPA.Controller.SpringJPAController.startFindAll(SpringJPAController.java:39)
位于com.dharam.springJPA.Controller.SpringJPAController$$FastClassBySpringCGLIB$$1B08118.invoke()
... `

我发现确定hibernate事务超时的逻辑存在问题。因此,刚刚提出了以下问题。


我将直接发送一份PR来修复它。我不知道它什么时候会改变,但如果Hibernate团队确定错误是正确的,我想它很快就会被修复。

那么,问题到底是什么。呼叫可能不会在1秒内完成,因此会发生超时,您可能会遇到异常请正确格式化代码如何处理e异常发生在超时之后?我也处于类似的情况,
timeout=1
在不到1秒的时间内超时,但
timeout>1
只是从来没有超时过!太奇怪了。@CDT你发现了什么线索吗