首页 文章

Spring 季批次和JTA

提问于
浏览
1

我正在使用 Spring 季批次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-Aware txn .

org.springframework.batch.core.step.FatalStepExecutionException:在org.springframework的org.springframework.batch.core.step.tasklet.TaskletStep $ ChunkTransactionCallback.doInTransaction(TaskletStep.java:441)中,JobRepository失败,强制退出未知状态 . org.springframework.batch.core.scope.context上的org.springframework.batch.core.step.tasklet.TaskletStep $ 2.doInChunkContext(TaskletStep.java:264)中的transaction.support.TransactionTemplate.execute(TransactionTemplate.java:131) .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)org.springframework.batch.repeat.support.RepeatTemplate.iterate(RepeatTemplate.java:143)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)org.springframework.batch.core.partition.support.TaskExecutorPartitionHandler $ 1.call (TaskExecutorPartitionHandler.java:118)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)org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:755)at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit (AbstractPlatformTransactionManager.java:724)org.springframework上的org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:387)org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:120) . 位于org.springframework.batch.core的$ Proxy52.updateExecutionContext(未知来源)的org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)上的aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) .step.tasklet.TaskletStep $ ChunkTransactionCallback.doInTransaction(TaskletStep.java :429)... 15更多引起:java.sql.SQLException:无法在分布式事务中调用Connection.commit . 事务管理器将在提交分布式事务时提交资源管理器 . at weblogic.jdbc.wrapper.JTSConnection.commit(JTSConnection.java:643)at org.springframework.jdbc.datasource.DataSourceTransactionManager.doCommit(DataSourceTransactionManager.java:268)

1 回答

相关问题