我使用的是弹簧批2.1.9。此版本支持JTA事务吗?我有一个批处理作业定义,它有多个步骤。这些步骤中只有一个与工作单元中的多个数据源进行交互。
是否可以仅在这一步中应用JtaTransactionManager?我得到了以下异常,看起来这是在spring批处理试图更新表中的元数据信息时发生的。
Caused by java.sql.SQLException Cannot call Connection.commit in distributed transaction. Transaction Manager will commit the resource manager when the distributed transaction is committed..
是否有任何属性可以设置为Jta级别/spring批处理以避免这种情况?
如果不执行步骤,如果我将JtaTxnMgr设置为作业级别,它会起作用吗?我会避免这一点,因为其他步骤不需要是XA感知的txn。
org.springframework.batch.core.step.FatalStepExecutionException: JobRepository故障迫使状态不明退出org.springframework.batch.core.step.tasklet.TaskletStep$ChunkTransactionCallback.doInTransaction(TaskletStep.java:441) at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:131) at org.springframework.batch.core.step.tasklet.TaskletStep$2.doInChunkContext(TaskletStep.java:264) at org.springframework.batch.core.scope.context.StepContextRepeatCallback.doInIteration(StepContextRepeatCallback.java:76)在org.springframework.batch.repeat.support.RepeatTemplate.getNextResult(RepeatTemplate.java:367) at org.springframework.batch.repeat.support.RepeatTemplate.executeInternal(RepeatTemplate.java:214) at org.springframework.batch.repeat.support.RepeatTemplate.iterate(RepeatTemplate.java:143) at org.springframework.batch.core.step.tasklet.TaskletStep.doExecute(TaskletStep.java:250) at org.springframework.batch.core.step.AbstractStep.execute(AbstractStep.java:195)在org.springframework.batch.core.partition.support.TaskExecutorPartitionHandler$1.call(TaskExecutorPartitionHandler.java:120) at org.springframework.batch.core.partition.support.TaskExecutorPartitionHandler$1.call(TaskExecutorPartitionHandler.java:118) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) at java.util.concurrent.FutureTask.run(FutureTask.java:138) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:619)引起的: org.springframework.transaction.TransactionSystemException:不能提交JDBC;嵌套异常是java.sql.SQLException:无法在分布式事务中调用Connection.commit。事务管理器在提交分布式事务时将提交资源管理器。在org.springframework.jdbc.datasource.DataSourceTransactionManager.doCommit(DataSourceTransactionManager.java:271) at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:755) at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:724) at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:387) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:120) at org.springframework.aop.framework。ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204) at $Proxy52.updateExecutionContext(未知源) at org.springframework.batch.core.step.tasklet.TaskletStep$ChunkTransactionCallback.doInTransaction(TaskletStep.java:429) . 15多个原因是: java.sql.SQLException:无法在分布式事务中调用Connection.commit。事务管理器在提交分布式事务时将提交资源管理器。在weblogic.jdbc.wrapper.JTSConnection.commit(JTSConnection.java:643) at org.springframework.jdbc.datasource.DataSourceTransactionManager.doCommit(DataSourceTransactionManager.java:268)
发布于 2014-08-20 14:34:47
您可以在tasklet元素上指定事务管理器,允许您在一个步骤上使用一个事务管理器,在另一个步骤上使用其他事务管理器。参见这里的5.1.1节:http://docs.spring.io/spring-batch/trunk/reference/html/configureStep.html
https://stackoverflow.com/questions/25406279
复制相似问题