@Transactional
- javax.transaction.Transactional
- org.springframework.transaction.annotation.Transactional
若是SpringBean則使用 2
否則使用 1
---------------------------------------------------------------------------------------;
- isolation – Spring 透過isolation 提供隔離;但是,在 javax 中,此功能只在特定情況使用。
- Propagation – 可使用 Spring 中的 propagation 属性和 Java EE 中的 value 属性;
Spring提供Propagation.SUPPORTS。 - readOnly – Spring readOnly唯讀 。
- timeout – Spring 超時設定。
- Rollback – javax 提供了 rollbackOn 和 dontRollbackOn 属性,而 Spring 提供了 rollbackFor 和 noRollbackFor,
以及兩個設定:rollbackForClassName 和 noRollbackForClassName。
-------------------------------------------------------------------------------------------;
@Transactional(
isolation = Isolation.READ_COMMITTED,
propagation = Propagation.SUPPORTS,
readOnly = false,
timeout = 30)
Isolation 分類
事務的隔離級別
- Isolation.READ_UNCOMMITTED 讀取未提交 缺點:髒讀
- Isolation.READ_COMMITTED 只能讀取已提交,解決髒讀 缺點:不可重複讀
- Isolation.REPEATABLE_READ 解決不可重複讀 ,缺點: 幻讀 (查詢與結果不一致)
- Isolation.SERIALIZABLE 所有的事務依次逐個執行,保證數據的一致性,缺點:性能低
- Isolation.DEFAULT 使用基礎數據存儲的默認隔離級別
參考:https://blog.csdn.net/huangjun0210/article/details/84202333
Propagation 分類
transaction遇到transaction的行為
- TransactionDefinition.PROPAGATION_MANDATORY
- TransactionDefinition.PROPAGATION_NESTED
- TransactionDefinition.PROPAGATION_NEVER
- TransactionDefinition.PROPAGATION_NOT_SUPPORTED
- TransactionDefinition.PROPAGATION_REQUIRED
- TransactionDefinition.PROPAGATION_REQUIRES_NEW
- TransactionDefinition.PROPAGATION_SUPPORTS
- TransactionDefinition.TIMEOUT_DEFAULT(Spring 不支援)
參考 :https://www.tpisoftware.com/tpu/articleDetails/2741
Spring AOP 代理
@Transactional 會有在同類別的內部調用method時失效問題
Optimistic Locking 與 Pessimistic locking
@Version
Optimistic Locking 可以使用來判斷
參考 : https://blog.mimacom.com/testing-optimistic-locking-handling-spring-boot-jpa/
DB 的 Transaction
ACID