Spring中的@Transactional的工作原理
1、原理
事務的概念想必大家都很清楚,其ACID特性在開發(fā)過程中占有重要的地位。同時在并發(fā)過程中會出現(xiàn)一些一致性問題,為了解決一致性問題,也出現(xiàn)了四種隔離級別,這里就不再詳述了,感興趣的可以去查一下。下面我們討論一下Spring中的事務。
Spring中的事務有兩種:
- 編程式事務
- 聲明式事務
通常情況下我們使用聲明式事務,它是基于SpringAOP實現(xiàn)的?;贏OP實現(xiàn)的事務極大得幫助了我們的開發(fā)效率,其本質(zhì)是對方法進行前后攔截,在目標方法前加入一個事務,在目標完成后再加入一個事務進行提交或者回滾,這種方式下我們并不需要在目標方法中的代碼中摻雜事務管理代碼,輕松進行事務管理。
而編程式事務就需要我們修改代碼來進行事務管理。這種方法看似很麻煩,但是它的存在自有它的道理,上面我們講到的聲明式事務控制,其控制的細粒度只能作用到方法上,無法在代碼塊中實現(xiàn)聲明式事務控制。我們都知道,一旦加上事務,程序的運行效率就會降低,所以編程式事務也有它的用武之地。
但是我們的廣大勞動人民也是智慧的。直接將需要事務的代碼塊獨立成方法,這樣仍然可以使用聲明式事務。當然在開發(fā)中具體情況要具體分析了。
2、用法
事務的傳播行為:

事務的隔離級別:

@Transactional屬性

示例代碼:
@Service
@Transactional(propagation = Propagation.REQUIRED,rollbackFor = Exception.class)
public class RoleServiceImpl implements RoleService {
@Autowired
private RoleDao roleDao;
@Transactional(propagation = Propagation.SUPPORTS,readOnly = true)
@Override
public List<Role> findAllRoles() {
return roleDao.selectAllRoles();
}
}3、拓展
1、為什么聲明式事務只能應用于方法上?
- 因為聲明式事務是基于AOP實現(xiàn)的,AOP是基于動態(tài)代理實現(xiàn)的。
- 動態(tài)代理只會捕捉來自外部的方法調(diào)用,
- 意思就是類內(nèi)部的方法調(diào)用類內(nèi)部的另外方法,并不會發(fā)生事務行為。
到此這篇關于Spring中的@Transactional的工作原理的文章就介紹到這了,更多相關Spring @Transactional 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
- 淺談Spring中@Transactional事務回滾及示例(附源碼)
- Spring事務@Transactional注解四種不生效案例場景分析
- springboot編程式事務TransactionTemplate的使用說明
- spring聲明式事務@Transactional底層工作原理
- spring中12種@Transactional的失效場景(小結)
- Spring事務處理Transactional,鎖同步和并發(fā)線程
- 基于Spring中的事務@Transactional細節(jié)與易錯點、幻讀
- spring聲明式事務 @Transactional 不回滾的多種情況以及解決方案
- Spring Transaction事務實現(xiàn)流程源碼解析
相關文章
Java調(diào)用接口如何獲取json數(shù)據(jù)解析后保存到數(shù)據(jù)庫
這篇文章主要介紹了Java調(diào)用接口如何獲取json數(shù)據(jù)解析后保存到數(shù)據(jù)庫問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-03-03
IDEA導入Springboot項目,注解和pom文件不識別的解決
這篇文章主要介紹了IDEA導入Springboot項目,注解和pom文件不識別的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-04-04
從0到1學SpringCloud之SpringCloud?gateway網(wǎng)關路由配置示例詳解
Spring?Cloud?Gateway的目標提供統(tǒng)一的路由方式且基于Filter?鏈的方式提供了網(wǎng)關基本的功能,?例如:安全、監(jiān)控、指標和限流?,這篇文章主要介紹了從0到1學SpringCloud之SpringCloud?gateway網(wǎng)關路由配置示例詳解,需要的朋友可以參考下2023-04-04

