1
java.lang.IllegalStateException: Existing transaction detected in JobRepository.
Please fix this and try again (e.g. remove @Transactional annotations from client).

请针对上述错误发送任何建议。我正在使用 Spring Batch 框架来读取 csv 并将其保存到数据库中。

4

1 回答 1

1

如果您jobLauncher.run(job,jobParameters)从现有事务中执行,您将收到此错误(这样做的原因是围绕 Spring Batch 处理事务以支持与执行的数据一致性的方式......)

这里有一些解决方法;

  • 如果您正在使用 JTA,并且您的 JTA 实现支持它,请使用注释您的调用方法@Transactional(propogation=NOT_SUPPORTED)- 这将在调用此run方法时将事务标记为“暂停”
  • 不要run从事务中调用该方法 - 例如,如果您使用 Spring Integration,则可以将 Spring Batch IntegrationJobLaunchingMessageHandler与队列或任务执行器通道结合使用
于 2013-07-15T14:59:36.800 回答