
目录
-
- 一、前情提要
-
- 原始需求:读取一个10万行的Excel
- 优化1:[**使用双异步后,从 191s 优化到 2s**](https://blog.youkuaiyun.com/guorui_java/article/details/135143234)
- 优化2:[**使用双异步后,如何保证数据一致性?**](https://blog.youkuaiyun.com/guorui_java/article/details/135705565)
- 优化3:[**获取双异步返回值时,如何保证主线程不阻塞?**](https://blog.youkuaiyun.com/guorui_java/article/details/135708663)
- 二、异步某线程失败时,主线程回滚所有异步线程的事务!
- 三、@Transactional注解
- 四、注解失效问题
- 五、通过Future获取异步返回值,添加事务
- 六、@async + @Transactional 事务失效问题
- 七、Spring 的事务传播机制是不能够跨线程的
- 八、总结
大家好,我是哪吒。
一、前情提要
在上一篇文章中,我们通过双异步的方式导入了10万行的Excel,有个小伙伴在评论区问我,如果保证事务呢,如果分批的话。
原始需求:读取一个10万行的Excel
通过串行读取Excel,单个Excel耗时191s。

优化1:使用双异步后,从 191s 优化到 2s
- 分别通过POI和EasyExcel的方式读取Excel并插入数据库;
- 探讨了“线程池中的核心线程数设置问题”;
- 经过数十次的测试,总结了通过线程池的方式,争取一次性并行入库,效率最佳。
本文详细介绍了如何在Java中处理双异步情况下保证数据一致性和事务管理。通过使用Future、CompletableFuture以及自定义线程池优化了Excel数据导入的性能。同时,探讨了@Transactional注解的使用及其失效场景,分析了Spring事务传播机制的限制,并提出了解决异步事务回滚的方案,最后总结了高效读取10万行Excel的最佳实践。
订阅专栏 解锁全文
597





