TransactionManagerException:事务不是该线程的当前事务

TransactionManagerException: Transaction is not current for this thread

我正在尝试将 CSV 文件中的一些数据加载到干净的数据库实例中。我通过使用 Apache Camel 创建一个 ETL 过程来做到这一点,它读取输入 CSV,将文件分成多行,并使用每行一个事务并行处理每一行。

class ImportRouteBuilder 扩展 RouteBuilder {

private final Importer importer
private final String endpoint

public ImportRouteBuilder(Importer importer, String endpoint) {
    this.endpoint = endpoint
    this.importer = importer
}

@Override
void configure() throws Exception {
    from(endpoint)
            .unmarshal(buildCsvDataFormat())
            .split(body())
            .parallelProcessing()
            .bean(importer)
}

private static CsvDataFormat buildCsvDataFormat() {
    CsvDataFormat csv = new CsvDataFormat();
    csv.skipHeaderRecord = true
    csv
}

}

@Slf4j
@Service
class CountryCsvImporter implements Importer {
   @Autowired
   private CountryRepository countryRepository

   @Autowired
   private Session session

   @Override
   void process(List record) {
       Transaction tx = session.beginTransaction();
       try {
          importCountry(record)
          tx.commit()
       }catch (Throwable t) {
          tx.rollback()
     }
     tx.close()
    }

我这样做是因为不想在我的模型仍在发展时使用 LOAD CSV 密码或 Neo4j 导入工具,因为在制作原型时使用 OGM 非常方便。但是现在我在 OGM 生成这个 TransactionManagerException 的过程中间发现了一堵墙,看起来这是管理事务的一些线程问题。

at com.cartrawler.service.CountryImportSpecification.Should 能够导入国家 csv(CountryImportSpecification.groovy:9) 由以下原因引起:org.neo4j.ogm.exception.TransactionManagerException:此线程的事务不是最新的 在 org.neo4j.ogm.session.transaction.DefaultTransactionManager.rollback(DefaultTransactionManager.java:78) 在 org.neo4j.ogm.transaction.AbstractTransaction.rollback(AbstractTransaction.java:65) 在 org.neo4j.ogm.drivers.embedded.transaction.EmbeddedTransaction.rollback(EmbeddedTransaction.java:60) 在 com.cartrawler.service.CountryCsvImporter.process(CountryCsvImporter.groovy:28)

谢谢你,好心 路易斯·奥斯卡

关闭并行处理,因为事务仅为单线程。