一個工作了2年的粉絲,私信了一個比較簡單的問題。 說: “Spring中事務的傳播行為有哪些?” 他說他能記得一些,但是在項目中基本上不需要配置,所以一下就忘記了。 結果導致面試被拒絕,有點遺憾! ok,關於這個問題,看看普通人和高手的回答。 普通人: 嗯。。。。。。。。 高手: 對於這個問題,需要 ...
一個工作了2年的粉絲,私信了一個比較簡單的問題。
說: “Spring中事務的傳播行為有哪些?”
他說他能記得一些,但是在項目中基本上不需要配置,所以一下就忘記了。
結果導致面試被拒絕,有點遺憾!
ok,關於這個問題,看看普通人和高手的回答。
普通人:
嗯。。。。。。。。
高手:
對於這個問題,需要從幾個方面去回答。
首選, 所謂的事務傳播行為,就是多個聲明瞭事務的方法相互調用的時候,這個事務應該如何傳播。
比如說,methodA()調用methodB(),兩個方法都顯示的開啟了事務。
那麼methodB()是開啟一個新事務,還是繼續在methodA()這個事務中執行?就取決於事務的傳播行為。
在Spring中,定義了7種事務傳播行為。
- REQUIRED:預設的Spring事物傳播級別,如果當前存在事務,則加入這個事務,如果不存在事務,就新建一個事務。
- REQUIRE_NEW:不管是否存在事務,都會新開一個事務,新老事務相互獨立。外部事務拋出異常回滾不會影響內部事務的正常提交。
- NESTED:如果當前存在事務,則嵌套在當前事務中執行。如果當前沒有事務,
則新建一個事務,類似於REQUIRE_NEW。 - SUPPORTS:表示支持當前事務,如果當前不存在事務,以非事務的方式執行。
- NOT_SUPPORTED:表示以非事務的方式來運行,如果當前存在事務,則把當前事務掛起。
- MANDATORY:強制事務執行,若當前不存在事務,則拋出異常.
- NEVER:以非事務的方式執行,如果當前存在事務,則拋出異常。
Spring事務傳播級別一般不需要定義,預設就是PROPAGATION_REQUIRED,除非在嵌套事務的情況下需要重點瞭解。
以上就是我對這個問題的理解!
總結
這個問題其實只需要理解事務傳播行為的本質以及為什麼需要考慮到事務傳播的問題。
就可以直接基於自身的技術積累來推演出答案,無非就是基於可能的策略進行窮舉,怎麼也能推演出5種吧。
本期的普通人VS高手面試系列就到這裡結束了。
有任何不懂的技術面試題,歡迎隨時私信我
版權聲明:本博客所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自
Mic帶你學架構
!
如果本篇文章對您有幫助,還請幫忙點個關註和贊,您的堅持是我不斷創作的動力。歡迎關註「跟著Mic學架構」公眾號公眾號獲取更多技術乾貨!