Spring 使用註解方式進行事物管理
Spring 使用註解方式進行事物管理
大家在使用spring的註解式事務管理時,對事務的傳播行為和隔離級別可能有點不知所措,下邊就詳細的介紹下以備方便查閱。
事物註解方式: @Transactional
當標於類前時, 標示類中所有方法都進行事物處理
例子:
@Transactional
public class TestServiceBean implements TestService {}
當類中某些方法不需要事物時:
@Transactional
public class TestServiceBean implements TestService {
private TestDao dao;
public void setDao(TestDao dao) {
this.dao = dao;
}
@Transactional(propagation = Propagation.NOT_SUPPORTED)
public List<Object> getAll() {
return null;
}
}
事物傳播行為介紹:
@Transactional(propagation=Propagation.REQUIRED)
如果有事務, 那麼加入事務, 沒有的話新建一個(預設情況下)
@Transactional(propagation=Propagation.NOT_SUPPORTED)
容器不為這個方法開啟事務
@Transactional(propagation=Propagation.REQUIRES_NEW)
不管是否存在事務,都建立一個新的事務,原來的掛起,新的執行完畢,繼續執行老的事務
@Transactional(propagation=Propagation.MANDATORY)
必須在一個已有的事務中執行,否則丟擲異常
@Transactional(propagation=Propagation.NEVER)
必須在一個沒有的事務中執行,否則丟擲異常(與Propagation.MANDATORY相反)
@Transactional(propagation=Propagation.SUPPORTS)
如果其他bean呼叫這個方法,在其他bean中宣告事務,那就用事務.如果其他bean沒有宣告事務,那就不用事務.
事物超時設定:
@Transactional(timeout=30) //預設是30秒
事務隔離級別:
@Transactional(isolation = Isolation.READ_UNCOMMITTED)
讀取未提交資料(會出現髒讀, 不可重複讀) 基本不使用
@Transactional(isolation = Isolation.READ_COMMITTED)
讀取已提交資料(會出現不可重複讀和幻讀)
@Transactional(isolation = Isolation.REPEATABLE_READ)
可重複讀(會出現幻讀)
@Transactional(isolation = Isolation.SERIALIZABLE)
序列化
MYSQL: 預設為REPEATABLE_READ級別
SQLSERVER: 預設為READ_COMMITTED
髒讀 : 一個事務讀取到另一事務未提交的更新資料
不可重複讀 : 在同一事務中, 多次讀取同一資料返回的結果有所不同, 換句話說,
後續讀取可以讀到另一事務已提交的更新資料. 相反, “可重複讀”在同一事務中多次
讀取資料時, 能夠保證所讀資料一樣, 也就是後續讀取不能讀到另一事務已提交的更新資料
幻讀 : 一個事務讀到另一個事務已提交的insert資料
相關文章
- spring事物配置,宣告式事務管理和基於@Transactional註解的使用Spring
- spring data mongodb 如何以事物的方式進行增刪改查SpringMongoDB
- Spring管理的@Configuration註解使用Spring
- spring boot使用註解的方式整合mybaitsSpring BootAI
- springboot整合redis2.x,使用spring註解進行快取Spring BootRedis快取
- Spring系列之事物是如何管理的Spring
- spring通過註解註冊bean的方式+spring生命週期SpringBean
- Spring(使用註解配置)Spring
- Spring AOP整合redis(註解方式) 實現快取統一管理SpringRedis快取
- 基於註解的方式使用spring-integration-redis分散式鎖SpringRedis分散式
- Spring的@PropertySource註解使用Spring
- Spring中基於註解方式的AOP操作Spring
- Spring或SpringBoot中管理JFinal ORM外掛事物Spring BootORM
- 3. 基於註解方式管理BeanBean
- 使用 Spring Transactional 註釋的最佳方式 - Vlad MihalceaSpring
- Spring IOC 常用註解與使用Spring
- Spring中@Import註解的使用SpringImport
- Spring MVC 常用註解的使用SpringMVC
- springboot註解方式使用redis快取Spring BootRedis快取
- 【進階】Spring中的註解與反射Spring反射
- Spring Boot入門(六):使用MyBatis訪問MySql資料庫(註解方式)Spring BootMyBatisMySql資料庫
- 從Hessian RPC 註解方式看Spring依賴注入RPCSpring依賴注入
- Spring學習筆記2(IOC註解方式&AOP)Spring筆記
- Spring-05 使用註解開發Spring
- Spring的@Qualifier註解使用說明Spring
- Spring註解Spring
- Spring進階案例之註解和IoC案例Spring
- Spring 實現策略模式--自定義註解方式解耦if...elseSpring模式解耦
- Spring Boot 事物回滾Spring Boot
- spring-AOP(二)實現原理之AspectJ註解方式Spring
- Spring Boot整合Spring Cloud Commons進行公共元件管理Spring BootCloud元件
- Hibernate 註解方式
- 【Spring註解】事務註解@TransactionalSpring
- Spring @Profile註解使用和原始碼解析Spring原始碼
- Spring快取註解@Cacheable、@CacheEvict、@CachePut使用Spring快取
- Spring Boot整合Spring Cloud Release進行版本釋出管理Spring BootCloud
- SPRING-spring註解整理Spring
- spring 異常 事物不回滾Spring
- Spring新註解Spring