首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >弹簧批和JTA

弹簧批和JTA
EN

Stack Overflow用户
提问于 2014-08-20 13:40:19
回答 1查看 2.3K关注 0票数 1

我使用的是弹簧批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)

EN

回答 1

Stack Overflow用户

发布于 2014-08-20 14:34:47

您可以在tasklet元素上指定事务管理器,允许您在一个步骤上使用一个事务管理器,在另一个步骤上使用其他事务管理器。参见这里的5.1.1节:http://docs.spring.io/spring-batch/trunk/reference/html/configureStep.html

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25406279

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档