Hibernate Spring异步作业中出现异常-InvalidDataAccessApiUsageException:没有正在进行的事务

Hibernate Spring异步作业中出现异常-InvalidDataAccessApiUsageException:没有正在进行的事务,hibernate,spring-boot,jpa,asynchronous,spring-batch,Hibernate,Spring Boot,Jpa,Asynchronous,Spring Batch,场景是,我有一个带有spring批处理作业的spring引导应用程序。我正在尝试使用@EnableAsync和ThreadPoolTaskExecutor使批处理作业异步,然后将此taskExecutor分配给JobLauncher。此更改后,作业异步运行,但我在持久化或更新数据库方面遇到问题: org.springframework.dao.InvalidDataAccessApiUsageException: no transaction is in progress; nested exc

场景是,我有一个带有spring批处理作业的spring引导应用程序。我正在尝试使用
@EnableAsync
ThreadPoolTaskExecutor
使批处理作业异步,然后将此taskExecutor分配给JobLauncher。此更改后,作业异步运行,但我在持久化或更新数据库方面遇到问题:

org.springframework.dao.InvalidDataAccessApiUsageException: no transaction is in progress; nested exception is javax.persistence.TransactionRequiredException: no transaction is in progress
    at org.springframework.orm.jpa.EntityManagerFactoryUtils.convertJpaAccessExceptionIfPossible(EntityManagerFactoryUtils.java:413)
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible(AbstractEntityManagerFactoryBean.java:489)
    at org.springframework.dao.support.ChainedPersistenceExceptionTranslator.translateExceptionIfPossible(ChainedPersistenceExceptionTranslator.java:59)
    at org.springframework.dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java:213)
    at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:147)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
    at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99)
    at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:282)
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
    at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:673)
    at com.abc.fin.rec.batch.dao.impl.CustomerDaoImpl$$EnhancerBySpringCGLIB$$b55f85f1.updateRequestSummary(<generated>)
    at com.abc.fin.rec.batch.service.impl.BatchServiceImpl.updateRequestSummary(BatchServiceImpl.java:122)
    at com.abc.fin.rec.batch.service.impl.BatchServiceImpl$$FastClassBySpringCGLIB$$b4c3b9f7.invoke(<generated>)
    at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
    at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:738)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
    at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99)
    at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:282)
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
    at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:673)
    at com.abc.fin.rec.batch.service.impl.BatchServiceImpl$$EnhancerBySpringCGLIB$$b9160b39.updateRequestSummary(<generated>)
    at com.abc.fin.rec.batch.cust.match.req.WriteToFileJobExecutionListener.beforeJob(WriteToFileJobExecutionListener.java:97)
    at org.springframework.batch.core.listener.CompositeJobExecutionListener.beforeJob(CompositeJobExecutionListener.java:73)
    at org.springframework.batch.core.job.AbstractJob.execute(AbstractJob.java:303)
    at org.springframework.batch.core.launch.support.SimpleJobLauncher$1.run(SimpleJobLauncher.java:135)
    at org.springframework.cloud.sleuth.instrument.async.SpanContinuingTraceRunnable.run(SpanContinuingTraceRunnable.java:52)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
    Caused by: javax.persistence.TransactionRequiredException: no transaction is in progress
        at org.hibernate.internal.SessionImpl.checkTransactionNeeded(SessionImpl.java:3430)
        at org.hibernate.internal.SessionImpl.doFlush(SessionImpl.java:1397)
        at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1393)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:347)
        at com.sun.proxy.$Proxy133.flush(Unknown Source)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:298)
        at com.sun.proxy.$Proxy127.flush(Unknown Source)
        at com.abc.fin.rec.batch.dao.impl.CustomerDaoImpl.updateRequestSummary(CustomerDaoImpl.java:138)
        at com.abc.fin.rec.batch.dao.impl.CustomerDaoImpl$$FastClassBySpringCGLIB$$333ee7df.invoke(<generated>)
        at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
        at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:738)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
        at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:136)
        ... 26 common frames omitted
org.springframework.dao.InvalidDataAccessApiUsageException:没有正在进行的事务;嵌套异常为javax.persistence.TransactionRequiredException:没有正在进行的事务
在org.springframework.orm.jpa.EntityManagerFactoryUtils.ConvertJPAAccessExceptionIffailable(EntityManagerFactoryUtils.java:413)上
位于org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.TranslateExceptionIffailable(AbstractEntityManagerFactoryBean.java:489)
在org.springframework.dao.support.ChainedPersistenceExceptionTranslator.TranslateExceptionIfEnabled(ChainedPersistenceExceptionTranslator.java:59)
位于org.springframework.dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java:213)
位于org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:147)
在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.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:673)
在com.abc.fin.rec.batch.dao.impl.CustomerDaoImpl$$EnhancerBySpringCGLIB$$b55f85f1.updateRequestSummary()上
位于com.abc.fin.rec.batch.service.impl.BatchServiceImpl.updateRequestSummary(BatchServiceImpl.java:122)
在com.abc.fin.rec.batch.service.impl.BatchServiceImpl$$FastClassBySpringCGLIB$$b4c3b9f7.invoke()上
位于org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
位于org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:738)
在org.springframework.aop.framework.ReflectiveMethodInvocation.procedue(ReflectiveMethodInvocation.java:157)上
位于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.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:673)
在com.abc.fin.rec.batch.service.impl.BatchServiceImpl$$EnhancerBySpringCGLIB$$b9160b39.updateRequestSummary()上
位于com.abc.fin.rec.batch.cust.match.req.WriteToFileJobExecutionListener.beforeJob(WriteToFileJobExecutionListener.java:97)
在org.springframework.batch.core.listener.CompositeJobeExecutionListener.beforeJob上(CompositeJobeExecutionListener.java:73)
位于org.springframework.batch.core.job.AbstractJob.execute(AbstractJob.java:303)
位于org.springframework.batch.core.launch.support.simplejoblancher$1.run(simplejoblancher.java:135)
位于org.springframework.cloud.sleuth.instrument.async.SpanContinuingTraceRunnable.run(SpanContinuingTraceRunnable.java:52)
位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
运行(Thread.java:745)
原因:javax.persistence.TransactionRequiredException:没有正在进行的事务
在org.hibernate.internal.SessionImpl.CheckTransactionRequired(SessionImpl.java:3430)上
位于org.hibernate.internal.SessionImpl.doFlush(SessionImpl.java:1397)
位于org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1393)
在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.orm.jpa.ExtendedEntityManagerCreator$extendedentitymanageringhandler.invoke(ExtendedEntityManagerCreator.java:347)
位于com.sun.proxy.$Proxy133.flush(未知来源)
在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.orm.jpa.SharedEntityManagerCreator$SharedentityManagerInvoke.invoke(SharedEntityManagerCreator.java:298)
位于com.sun.proxy.$Proxy127.flush(未知来源)
位于com.abc.fin.rec.batch.dao.impl.CustomerDaoImpl.updateRequestSummary(CustomerDaoImpl.java:138)
在com.abc.fin.rec.batch.dao.impl.CustomerDaoImpl$$FastClassBySpringCGLIB$$333ee7df.invoke()上
位于org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
位于org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:738)
在org.springfr