java - 多个线程上的 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());
请建议。
解决方案
推荐阅读
- c# - 我如何从 Literall Control ASP NET 中获取值
- javascript - Leaflet _ NextJS - 我的应用程序奇怪地显示标记和弹出窗口
- c - `int kind : 19;` 是什么意思?
- javascript - 如何用另一个按钮而不是显示它的按钮隐藏 DIV?
- go - 在golang中运行多个条件函数
- css - 填充父div高度
- build - VMS 有哪些替代方案来管理不同的软件项目依赖项?
- flutter - 如何使用填充水平滚动到屏幕的最后/开始?
- sql - SELECT DATEPART, DATENAME or other? SQL
- asynchronous - 如何映射()一个流,直到它在 Dart 中被取消?