Spring Boot v2.x中的自動配置和事務管理分析

事務的作用就是為了保證用戶的每一個操作都是可靠的,事務中的每一步操作都必須成功執行,只要有發生異常就會退到事務開始未進行操作的狀態。

事務管理是Spring框架中最為常用的功能之一,我們在使用Spring Boot開發應用時,一些業務場景也需要使用事務。


一、Spring boot中的自動配置

spring boot與spring mvc的一個重要區別就是spring boot遵循“約定優於配置”這一原則,而spring-boot-autoconfigure模塊正是完美的實現這個原則。

spring boot autoconfigure的本質就是自動配置spring的各種bean,然後使應用可以通過@Autowired等注入方式來直接使用bean。

Spring boot 啟動應用入口已經添加了@SpringBootApplication註解,所以不必再寫@EnableAutoConfiguration註解了。

Spring Boot v2.x中的自動配置和事務管理分析

那spring boot是如何實現自動配置的?它怎麼知道需要加載哪些AutoConfiguration?

這個其實是用到了spring-factories機制,這裡簡單說一下它在autoconfigure中的應用,我們直接來看一下spring-boot-autoconfigure-2.2.2.RELEASE.jar包下的spring.factories文件。

Spring Boot v2.x中的自動配置和事務管理分析

key是org.springframework.boot.autoconfigure.EnableAutoConfiguration,value是每個以逗號隔開的AutoConfiguration,結合spring-factories的運行原理,所有的自動配置是從這裡開始加載的。

Spring Boot v2.x中的自動配置和事務管理分析


TransactionAutoConfiguration是Spring Boot關於事務的自動配置類。它僅在類PlatformTransactionManager存在於classpath上時生效。

Spring Boot v2.x中的自動配置和事務管理分析

在TransactionAutoConfiguration 類中,已通過 @EnableTransactionManagement註解開啟事務。

Spring Boot v2.x中的自動配置和事務管理分析

在Spring Boot中,當我們使用了spring-boot-starter-jdbc或spring-boot-starter-data-jpa依賴的時候,框架會自動默認分別注入DataSourceTransactionManager或JpaTransactionManager,所以我們不需要任何額外配置就可以用@Transactional註解進行事務的使用。

在pom.xml 文件中,當我們添加mybatis 依賴包時,會自動添加對spring-boot-starter-jdbc的依賴,如下所示:

<dependency>

<groupid>org.mybatis.spring.boot/<groupid>

<artifactid>mybatis-spring-boot-starter/<artifactid>

<version>1.3.2/<version>

這樣,在spring boot項目中,就會自動注入DataSourceTransactionManager。

Spring Boot v2.x中的自動配置和事務管理分析

DataSourceTransactionManager 將會攔截標註有@Transactional註解的方法。因此,之前使用的@EnableTransactionManagement註解就不必添加了。



Spring支持聲明式事務,即使用註解來選擇需要使用事務的方法,它使用@Transactional註解在方法上表明該方法需要事務支持。

@Transactional

public void saveSomething(Long id, String name) {

//數據庫操作

}

在此處需要特別注意的是,此@Transactional註解來自org.springframework.transaction.annotation包,而不是javax.transaction。

Spring Boot v2.x中的自動配置和事務管理分析

被 @Transactional 註解的方法,將支持事務。如果註解在類上,則整個類的所有方法都默認支持事務。


分享到:


相關文章: