spring 事務的七中傳播行為五中隔離
阿新 • • 發佈:2018-09-06
eth 事務隔離級別 true 操作 似的 拋出異常 default res pla
事務的傳播行為(七):
public enum Propagation { REQUIRED(TransactionDefinition.PROPAGATION_REQUIRED), SUPPORTS(TransactionDefinition.PROPAGATION_SUPPORTS), MANDATORY(TransactionDefinition.PROPAGATION_MANDATORY), REQUIRES_NEW(TransactionDefinition.PROPAGATION_REQUIRES_NEW), NOT_SUPPORTED(TransactionDefinition.PROPAGATION_NOT_SUPPORTED), NEVER(TransactionDefinition.PROPAGATION_NEVER), NESTED(TransactionDefinition.PROPAGATION_NESTED); }
PROPAGATION_REQUIRED |
如果當前沒有事務,就新建一個事務,如果已經存在一個事務中,加入到這個事務中。這是最常見的選擇。(有A B 兩個在方法C 裏面調用了方法A和方法B如果A有異常執行失敗, 那麽B方法也不會配執行) |
PROPAGATION_SUPPORTS |
支持當前事務,如果當前沒有事務,就以非事務方式執行 |
PROPAGATION_MANDATORY |
使用當前的事務,如果當前沒有事務,就拋出異常。 |
PROPAGATION_REQUIRES_NEW |
新建事務,如果當前存在事務,把當前事務掛起。 理解:(方法A 方法B begin trans a method b() end ) |
PROPAGATION_NOT_SUPPORTED |
以非事務方式執行操作,如果當前存在事務,就把當前事務掛起。A方法調用B方法 B不執行事務 |
PROPAGATION_NEVER |
以非事務方式執行,如果當前存在事務,則拋出異常 |
PROPAGATION_NESTED |
如果當前存在事務,則在嵌套事務內執行。如果當前沒有事務,則執行與PROPAGATION_REQUIRED類似的操作。 |
事務的隔離(五):
DEFAULT 這是一個PlatfromTransactionManager默認的隔離級別,使用數據庫默認的事務隔離級別.
未提交讀(read uncommited) :臟讀,不可重復讀,虛讀都有可能發生
已提交讀 (read commited):避免臟讀。但是不可重復讀和虛讀有可能發生
可重復讀 (repeatable read) :避免臟讀和不可重復讀.但是虛讀有可能發生.
串行化的 (serializable) :避免以上所有讀問題.
Mysql 默認:可重復讀
spring 事務的七中傳播行為五中隔離