首页 > 解决方案 > 多个线程上的 Spring Transaction

问题描述

我想知道是否有可能在多个线程上进行事务。问题是,我需要保留大量记录。如果我按顺序进行,则需要很长时间。这就是为什么我需要对这些实体对象进行分区并并行保存它们。哪个更快并且效果很好。但只有权衡是。每个线程都在它自己的事务中。如果其中任何一个失败。它将回滚自己的线程事务,但不会全部回滚。有没有办法在单个事务中运行所有线程。这样我就可以控制交易。我正在使用 JpaRepository 存储库来持久化或删除。

代码示例

@Transactional
public boolean executeTransaction(final EntityWrapper entityWrapper) {
       transactionTemplate = new TransactionTemplate(transactionManagerRepo);
try {
        transactionTemplate.execute(new TransactionCallbackWithoutResult() {
            protected void doInTransactionWithoutResult(TransactionStatus status) {
                repo.saveAll(list); // Saves all at once. Batch commit. Which takes long time

         //      other way executing in ThreadPoolExecutor saving 200 records parallelly 
            entitiesList = partition(entitiesMasterList, 200);
            executor = ThreadPoolExecutor.initializeThreadPoolExecutor(entitiesList.size());

请建议。

标签: javaspringhibernatejpaspring-transactions

解决方案


推荐阅读