当前位置: 首页 > 知识库问答 >
问题:

spring batch和JTA

谭京
2023-03-14

我使用的是spring batch 2.1.9。这个版本支持JTA事务吗?我有一个批处理作业定义,它有多个步骤。这些步骤中只有一个与工作单元中的多个数据源交互。

是否可以将JtaTransactionManager应用于这一步骤?当spring batch试图更新表中的元数据信息时,我发现了以下异常。

如果不是step,如果我在作业级别设置JtaTxnMgr,它会工作吗?我会避免这种情况,因为其他步骤不需要是XA感知的TXN。

org.springframework.batch.core.step.fatalstepExecutionException:JobRepository失败,迫使在org.springframework.batch.core.step.tasklet.taskletstep$chunkTransactionCallback.doinTransaction(taskletstep(taskletstep.java:441)在org.springframework.transaction.support.transactiontemplate.execute(transactiontemplate.131)在.doiniteration(stepcontextrepeatcallback.java:76)在org.springframework.batch.repeat.support.repeattemplate.getnextextsult(repeattemplate.java:367)在org.springframework.batch.repeat.support.repeattemplate.executeinternal(repeattemplate.java:214)在org.springframework.batch.repeattemplate.java:143)在在org.springframework.batch.core.partition.support.taskExecutorPartitionHandler$1调用(taskExecutorPartitionHandler.java:120)在org.springframework.batch.core.partition.support.taskExecutorPartitionHandler$1调用(taskExecutorPartitionHandler.java:118)在.runTask(ThreadPoolExecutor.java:886)位于java.util.concurrent.ThreadPoolExecutor$worker.run(ThreadPoolExecutor.java:908)位于java.lang.thread.run(Thread.java:619),原因是:org.springframework.transaction.Transaction.SystemException:无法提交JDBC事务;嵌套异常是java.sql.sqlException:不能在分布式事务中调用Connection.Commit。事务管理器将在提交分布式事务时提交资源管理器。在org.springframework.jdbc.datasource.datasourceTransactionManager.doCommit(datasourceTransactionManager.java:271)在org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:755)在在org.springframework.aop.framework.reflectiveMethodInvocation.proce(reflectiveMethodInvocation.java:172)在org.springframework.aop.framework.jdkdynamicaopProxy.invoke(jdkdynamicaopProxy.java:204)在$proxy52.updateExecutionContext(未知源)在org.springframework.batch.core.tasklet.taskletStep:429)...15多个原因是:java.sql.sqlException:无法在分布式事务中调用Connection.commit。当分布式事务提交时,事务管理器将提交资源管理器。在weblogic.jdbc.wrapper.jtsConnection.commit(jtsConnection.java:643),在org.springframework.jdbc.datasource.datasourceTransactionManager.doCommit(DatasourceTransactionManager.java:268)

共有1个答案

李和裕
2023-03-14

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

 类似资料:
  • 主要内容:面向读者,前提条件,问题反馈Spring Batch是一个轻量级框架,用于在开发企业应用程序中批处理应用程序。 本教程解释了Spring Batch的基本概念,并展示了如何在实际环境中使用它。 面向读者 本教程对于那些需要处理大量涉及诸如事务管理,作业处理统计,资源管理等重复操作的记录的专业人员来说尤其有用。Spring Batch是处理大容量的非常有效的框架 批量作业。 前提条件 Spring Batch建立在Spring

  • 我想用3个步骤建立一个批次。我想配置这个步骤,就像如果有100条记录,当step1读取、处理和写入一个10块时,step02,然后step03开始和结束,然后再次返回step1,读取下一个块。这在Spring批量可能吗?

  • 用例:步骤1:ItemReader:从数据库中读取1000个ItemProcessor块中的数据:处理这些数据。ItemWriter:将数据写入地图,以便下一步使用 步骤2:ItemReader:读取地图ItemProcessor:处理地图数据并获取新对象。ItemWriter:将新的进程对象持久化到数据库中。 现在我希望Map在整个作业中保持不变,目前我已经为Map创建了一个不同的POJO类,并

  • 我有一个springbatch应用程序,我将连接到一个网络数据库进行阅读。我发现的大多数示例都嵌入了数据库,用于独立测试。我不想那样做。我不确定配置是否类似。以下是我所拥有的最具德国特色的部分(带有一些异议): ,然后从应用程序启动: 我没有配置数据源。我不确定,因为我的基本上只是一个到远程网络数据库的客户端连接,它的配置是否会与我找到的各种示例的嵌入式设置不同。所以我自然会出错(如下)。我只是在

  • 我正在编写spring批处理,它从平面文件中读取数据,很少进行处理,并将摘要写入输出文件。与reader相比,我的处理器和写入程序相对更快。我正在使用FlatFileItemReader,并尝试了从50-1000开始的各种提交间隔。我的批处理作业必须以更快的速度处理1000万条记录。请告诉我如何提高FlatFileItemReader的速度。粘贴到我的配置文件和映射器类下面,读取字段集并将值设置为

  • 我们的SpringBatch作业只有一个步骤,包括ItemReader、ItemProcessor和ItemWriter。我们用不同的参数同时运行同一个作业。ItemReader是有状态的,因为它包含从中读取的输入流。 因此,我们不希望ItemReader的相同实例用于每个JobInstance(作业参数)调用。 我不太确定哪种是这种情况的最佳“范围界定”。 1) 该步骤是否应该以@JobScop

  • 我有一些非常类似于下面的代码(我不得不做一些困惑)。我正在获取一个应用程序启动失败的错误。未显示的代码是datasource bean和spring boot application类。当我在debug中放置断点并运行所有bean时,所有bean似乎都被创建了,除了Job和Step bean,这两个bean似乎被完全跳过了。我不确定如何进一步诊断。似乎是一些Spring的魔法问题。任何想法都非常感

  • 我正在尝试对作业使用Spring批处理。我有两个作业tempJob和tempJob2在两个单独的配置中。当尝试使用命令行参数(-dspring.batch.job.names=tempJob)运行tempJob时,SpringBatch尝试运行tempJob两次,我得到以下错误 2018-06-15 11:36:37.956信息14436---[main]O.S.B.C.L.Support.Sim