`
- 浏览:
2043 次
-
1.项目中一些业务方法中可能涉及多个异步方法调用,某些异步方法可能调用失败,但之前的异步方法是不会回滚的,因此我本地需要每执行完一步异步调用就更新本地的状态,用于记录方法执行到哪里了。如果方法执行中失败过,则下次重新调用该方法时,我可以根据本地的状态判断不再执行之前已经调用过的异步方法。为了使更新状态的方法不会随方法调用失败而回滚,因此使用一个独立的事务,在spring的声明式事务中将事务传播性配置为Propagation.REQUIRES_NEW即可以满足要求,但有一点需要注意到是这个更新状态的方法需要放置到另外一个类里,究其原因还需进一步研究下。
2.另一个业务方法里首先需要调用方法A更新一些业务数据,如果后续方法有异常是需要回滚方法A的,后面还有一个方法B中会做类似上面所说记录过程状态的操作,这些方法里的更新操作是独立事务的。从业务上讲这些似乎都是合情合理的,但由于前后的操作都处理的是一张数据库表,这导致了一个很严重的问题——死锁。起先以为在事务隔离级别上设置为Isolation.READ_UNCOMMITTED可以解决,后来意识到事务的4个隔离级别只是对于数据可以见性的设置,而我的问题出在两次update操作上。方法A在第一个的事务中更新了表中某一条数据但还未提交,spring默认的事务隔离级别为Isolation.READ_COMMITTED,这是锁当前操作的数据行的。数据库中对该行数据加了排他锁,直到事务结束才会释放锁。而此时方法B在另一个事务中对同一张表的同一条数据进行update操作,方法B在等待方法A释放锁,方法A又要等待方法B调用结束,因而造成了死锁。最终解决的办法是方法A也做独立事务处理,其他相关的业务逻辑再做调整吧。
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
"每日小记"就是这样一款应用,它结合了记账和日记的功能,为用户提供了一个全面的生活记录平台。 首先,我们要了解记账的重要性。在个人财务管理中,记账是一个基础但至关重要的步骤。通过"每日小记",用户可以轻松...
总的来说,"java小记.rar"这个压缩包可能是对Java Web开发全面而深入的总结,包括基础概念、实战经验和技术趋势,对于初学者和有经验的开发者来说都是宝贵的资源。通过学习和参考这些笔记,可以提升Java Web开发技能...
在“android开发小记”这个主题中,我们可以深入探讨Android应用程序开发的相关知识,特别是通过查看提供的压缩文件中的代码示例。这些文件名如lesson_8_code.zip至lesson_20_codel.zip,以及不同的Mp3Player版本,...
### C++11 新特性详解 ...通过以上对C++11新特性的详细介绍,我们可以看到这些特性如何极大地提高了C++代码的可读性、安全性和效率。无论是对于C++新手还是有经验的开发者来说,掌握并应用这些新特性都是非常有益的。
7. 语言学:由于OCR技术的限制,部分字可能识别错误或遗漏,这反映了在计算机处理文本时常见的OCR错误问题,以及在信息传播过程中的校对和修正的必要性。这方面的知识点包括文字识别、图像处理、数据校对等。 以上...
环境: Linux s12084 2.6.9-67.ELsmp #1 SMP Wed ...小记一下。以备以后参考。 boost 库做得真好。在windows 平台, linux 平台下编译都很顺利。hp aCC 也宣称对 boost 1.35 完全支持 。 全部编译是很痛苦的过程
咬人草的故事引发了读者对生存环境和生命适应性的思考,体现了自然界生物的智慧和生存之道。同时,文章还包含了一种自我反省的意味,提醒人们在接触未知事物时应保持谨慎和理解,而不是轻易地去改变或挑战它。
标题中的“Flex整合J2EE开发小记+源码下载”揭示了本文的主题,主要讨论的是如何将Adobe Flex技术与Java EE(J2EE)平台相结合进行应用开发,并且提供了相应的源代码供学习和参考。Flex是一种用于构建富互联网应用...
随笔小记.doc
这篇小记将深入探讨Spring的主要组件和关键特性,带你一步步走进Spring的世界。 首先,我们要理解Spring的核心——依赖注入。在传统的Java程序中,对象之间的依赖关系通常是硬编码的,这使得代码难以测试和维护。...
《拾荒小记》的CHM文件包含了上述内容的详细实现和解释,是学习数据结构和算法的好帮手。通过阅读和实践,学习者不仅可以加深对理论的理解,还能提升编程能力,为未来解决复杂问题打下坚实基础。
本小记将重点探讨MATLAB在数学建模中的应用及其相关算法。 一、MATLAB基础 MATLAB(Matrix Laboratory)是一个综合性的数值计算与符号计算软件,其核心是矩阵运算。在数学建模中,我们可以利用MATLAB进行数据处理...
GeoStudio学习小记
ODPS 可以对大量数据进行处理、存储和分析,提供了高性能和高可靠性的数据处理能力。 PAI 平台 PAI 平台是阿里大数据分析平台的机器学习组件,提供了多种机器学习算法和模型用于数据分析和预测。PAI 平台可以与 ...
4. **事务**:Redis支持简单的事务,允许用户一次性执行多个操作,保证原子性。 5. **发布订阅**:Redis的发布订阅功能使得客户端可以订阅特定频道,当有消息发布时,所有订阅者都会收到通知,用于实现消息队列或...
在本项目中,"我的日常小记:spring以及mybatis最终源码" 是一个记录了开发者个人编程经验的项目,主要涉及两个核心框架——Spring和MyBatis。这两个框架是Java开发领域中非常流行的技术栈,广泛应用于企业级后端...
C++作为一种强大的编程语言,其高效性和灵活性使得开发这样的应用成为可能。下面我们将深入探讨该记账本的几个关键知识点。 1. **面向对象编程**:C++是一种支持面向对象编程(OOP)的语言,这使得开发者能够将现实...
这篇“sql loader用法小记”可能是博主对SQL Loader使用经验的总结和分享,虽然描述中没有具体信息,但从标签“源码”和“工具”可以推断,内容可能涉及到SQL Loader的基本操作、配置文件以及可能遇到的问题。...
11. 事务处理:SQL支持事务(BEGIN, COMMIT, ROLLBACK),确保数据的一致性和完整性。 工具相关: 1. 数据库管理工具:如MySQL Workbench、phpMyAdmin、Microsoft SQL Server Management Studio等,提供图形化界面...