【Java高級】如何寫出優(yōu)雅可靠事務(wù)代碼?基于Spring事務(wù)擴展

勵志當最強課代表的我來給大家總結(jié)總結(jié)??????
如何寫出優(yōu)雅可靠事務(wù)代碼?基于Spring事務(wù)擴展
視頻內(nèi)容:
1??異步線程??
2??Spring事務(wù)失效的場景還有幾點??
視頻內(nèi)容:
1??異步線程??
- 異步線程拿到了連接和主線程,它拿到了連接肯定不是同一個,所以只有當一個數(shù)據(jù)庫同一個連接,你才能去做事務(wù)控制。這種異步線程的情況在 spring 里面的事務(wù)控制里面是不支持的。多線程的事物應(yīng)該怎么去控制,大家可以下來去想一下。
- 由于各種歷史原因,或者引入的成本太高,或者這個場景本身對一致性的要求并不是特別高,是盡量去保證做到一個一致,并沒有去引入這種本地消息表、事務(wù)消息這種比較重的分布式事務(wù)實現(xiàn)
- 平時盡量要保證我們的事物盡量小,開啟關(guān)閉事物,這個是有資源消耗成本的。另外就是數(shù)據(jù)庫的連接池,它也是有限的,如果有大事務(wù),你會一直持有連接不釋放,對于整個線程池的吞吐量是有影響的。所以在寫代碼的時候要避免大事務(wù),比如能批量的就盡量批量,不要用循環(huán),也盡量不要在事務(wù)里面去做一些 RPC 這種比較耗時的操作。
- ?00:42?

2??Spring事務(wù)失效的場景還有幾點??
- 非public修飾
- final修飾也會失效, 動態(tài)代理需要重寫方法才能生效事務(wù), final修飾則無法重寫
- static修飾也會失效
- 吞了異常, catch住沒有拋給spring
- 拋了錯誤的異常, catch住手動拋Exception則不會回滾, 因為spirng事務(wù)只會處理RuntimeException和Error
?
03:37
?
標簽: