Spring事務(wù)的原理
Spring事務(wù)的本質(zhì)其實(shí)就是數(shù)據(jù)庫(kù)對(duì)事務(wù)的支持,沒有數(shù)據(jù)庫(kù)的事務(wù)支持,spring是無法提供事務(wù)功能的。對(duì)于純JDBC操作數(shù)據(jù)庫(kù),想要用到事務(wù),可以按照以下步驟進(jìn)行:
- 獲取連接 Connection con = DriverManager.getConnection()
- 開啟事務(wù)con.setAutoCommit(true/false);
- 執(zhí)行CRUD
- 提交事務(wù)/回滾事務(wù) con.commit() / con.rollback();
- 關(guān)閉連接 conn.close();
使用Spring的事務(wù)管理功能后,我們可以不再寫步驟 2 和 4 的代碼,而是由Spirng 自動(dòng)完成。
那么Spring是如何在我們書寫的 CRUD 之前和之后開啟事務(wù)和關(guān)閉事務(wù)的呢?
Spring中的事務(wù)是如何實(shí)現(xiàn)的?
-
Spring事務(wù)底層是基于數(shù)據(jù)庫(kù)事務(wù)和AOP機(jī)制的。
-
首先對(duì)于使用了@Transactional注解的Bean,Spring會(huì)創(chuàng)建一個(gè)代理對(duì)象作為Bean。
-
當(dāng)調(diào)用代理對(duì)象的方法時(shí), 會(huì)先判斷該方法上是否加了@Transactional注解
-
如果加了,那么則利用事務(wù)管理器創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)連接
-
并且修改數(shù)據(jù)庫(kù)連接的autocommit屬性為false, 禁止此連接的自動(dòng)提交, 這是實(shí)現(xiàn)Spring事務(wù)非常重要的一步。
-
然后執(zhí)行當(dāng)前方法,方法中會(huì)執(zhí)行sql
-
執(zhí)行完當(dāng)前方法后,如果沒有出現(xiàn)異常就直接提交事務(wù)。
-
如果出現(xiàn)了異常,并且這個(gè)異常是需要回滾的就會(huì)回滾事務(wù),否則仍然提交事務(wù)。
-
Spring事務(wù)的隔離級(jí)別對(duì)應(yīng)的就是數(shù)據(jù)庫(kù)的隔離級(jí)別。
-
Spring事務(wù)的傳播機(jī)制是Spring事務(wù)自己實(shí)現(xiàn)的,也是Spring事務(wù)中最復(fù)雜的文章來源:http://www.zghlxwxcb.cn/news/detail-636138.html
-
Spring事務(wù)的傳播機(jī)制是基于數(shù)據(jù)庫(kù)連接來做的,一個(gè)數(shù)據(jù)庫(kù)連接一個(gè)事務(wù), 如果傳播機(jī)制配置為需要新開一個(gè)事務(wù),那么實(shí)際上就是先建立一個(gè)數(shù)據(jù)庫(kù)連接, 在此新數(shù)據(jù)庫(kù)連接上執(zhí)行sql文章來源地址http://www.zghlxwxcb.cn/news/detail-636138.html
到了這里,關(guān)于spring事務(wù)和數(shù)據(jù)庫(kù)事務(wù)是怎么實(shí)現(xiàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!