Spring Boot 開啟聲明式事務支持
所有的數據訪問技術都有事務處理機制,這些技術提供了API用來開啟事務、提交事務以完成數據操縱,或者在發生錯誤的時候回滾數據。Spring支持聲明式事務,這是基於AOP實現的。
Spring提供了一個@EnableTransactionManagement 注解以在配置類上開啟聲明式事務的支持。添加該注解后,Spring容器會自動掃描被@Transactional注解的方法和類。簡單開啟事務管理:
@SpringBootApplication
@EnableTransactionManagement // 開啟注解事務管理,等價於xml配置方式的 <tx:annotation-driven />
public class DemoApplication {
。。。
查看項目事務管理器
關於事務管理器,不管是JPA還是JDBC等都實現自接口 PlatformTransactionManager,你如果添加的是 spring-boot-starter-jdbc 依賴,框架會默認注入 DataSourceTransactionManager 實例;如果添加的是 spring-boot-starter-data-jpa 依賴,框架會默認注入 JpaTransactionManager 實例。
| 數據訪問技術 |
實 現 |
| JDBC |
DataSourceTransactionManager |
| JPA |
JpaTransactionManager |
| Hibernate |
HibernateTransactionManager |
| JDO |
JdoTransactionManager |
| 分布式事務 |
JtaTransactionManager |
數據訪問技術及其實現
如下方法可以查看自動注入的是 PlatformTransactionManager 接口的哪個實現類:
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.Bean; import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.annotation.EnableTransactionManagement; @SpringBootApplication @EnableTransactionManagement //開啟聲明式事務支持
public class DemoApplication { public static void main(String[] args) { System.out.println("項目URL: http://localhost:8087/user/getUserById"); SpringApplication.run(DemoApplication.class, args); } @Bean public Object testBean(PlatformTransactionManager platformTransactionManager){ System.out.println(">>>>>>>>>>事務管理器:" + platformTransactionManager.getClass().getName()); return new Object(); } }
啟動項目,在控制台找到如下信息,說明項目添加的是 spring-boot-starter-jdbc 依賴。
>>>>>>>>>>事務管理器:org.springframework.jdbc.datasource.DataSourceTransactionManager
關於開啟Spring Boot聲明式事務,大家有什么看法?歡迎留言討論,共同進步,也希望大家多多點贊,祝各位生活愉快。
Reference
《JavaEE開發的顛覆者: Spring Boot實戰》
