Spring事務的實現方式和原理以及隔離級別?
在使用spring的時候,事務有兩種形式,一種是編程式,一種是聲明式。@Transactional就是聲明式事務。
首先,事務的概念是數據庫層面的,spring只是基於此進行了擴展。
在一個方法上加了@Transactional注解后,會將這個代理對象做為bean,當在使用這個代理對象作為方法時,如果這個方法存在了@Transactional注解,那么代理對象會先把
事務的自動提交設置為false,然后再去執行原本的業務邏輯方法,如果執行業務邏輯方法沒有出現異常,那么代理邏輯中就會將事務進行提交,如果出現了異常就會回滾。
spring的事務隔離級別就是數據庫的隔離級別:外加一個默認等級。
read uncommitted 未提交讀
read commit 提交讀,不可重復讀。
repeatable read 可重復讀。
seriallizable 可串行化
spring 事務的傳播機制
保證同一個事務中
PORPAGATION_REQUIRED:支持當前事務,如果不存在 就新建一個(默認)
PROPAGATION_SUPPORTS:支持當前事務,如果不存在,就不使用事務
PROPAGATION_MANDATORY:支持當前事務,如果不存在,拋出異常
* 保證沒有在同一個事務中
PROPAGATION_REQUIRES_NEW:如果有事務存在,掛起當前事務,創建一個新的事務
PROPAGATION_NOT_SUPPORTED:以非事務方式運行,如果有事務存在,掛起當前事務
PROPAGATION_NEVER:以非事務方式運行,如果有事務存在,拋出異常
PROPAGATION_NESTED:如果當前事務存在,則嵌套事務執行