java - Spring Tx 错误

标签 java spring spring-batch

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/

相关文章:

java - 在 onCreateView 中执行 AsyncTask 第一次尝试时不显示信息

java - 如何在Spring中从序列生成实体字段的部分值?

java - 如何在 spring mvc 的 session 中添加和检索对象

java - Hibernate 4 - 调用 DAO 和初始化 sessionFactory bean

java - JPanel 未出现在 JFrame 中

java - Spring:如何在RESTful服务中为@RequestBody添加XSS保护?

java - 如何使用 Spring-Batch 批量插入?

spring - 从 Controller 运行 Spring 批处理作业

spring-batch - 如何设置在 flatfileItemReader 中读取的最大记录数?

java - libgdx,如何使我的图像可触摸