java.lang.IllegalStateException: Existing transaction detected in JobRepository. Please fix this and try again (e.g. remove @Transactional annotations from client).
请针对上述错误提出任何建议。 我正在使用 Spring Batch 框架读取 csv 并将其保存到数据库。
最佳答案
如果您从现有事务中执行jobLauncher.run(job,jobParameters)
,您将收到此错误。 (其原因在于 Spring Batch 处理事务的方式以支持数据与执行的一致性......)
这里有一些解决方法;
- 如果您使用 JTA,并且您的 JTA 实现支持它,请使用
@Transactional(propogation=NOT_SUPPORTED)
注释您的调用方法 - 这将在调用此run
方法时将事务标记为“挂起” - 不要从事务中调用
run
方法 - 例如,如果您使用 Spring Integration,则可以将 Spring Batch Integration 的JobLaunchingMessageHandler
与队列或任务执行器 channel 结合使用
关于java - Spring Tx 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17656924/