在之前配置SpringMVC項目的時候經常會在application.xml裏面進行事務
配置常見如下
SpringMVC事務配置
//配置事務
<bean id = "defaultTransaction" class =
"org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name = "dataSource" ref = "dataSourceOne"></property>
</bean>
//開啓事務
<tx:annotation-driven transaction-manager="defaultTransaction"> </tx:annotation-driver>
SpringBoot事務
但是在用springboot項目之後,在.properties或者.yml裏面就沒有了關於事務的
配置,那麼是不用配置了麼,那肯定是不可能的,真相就是事務的相關配置
SpringBoot給你做了而已,這就要說說你用的數據操作是什麼了
-
spring-boot-starter-data-jpa
如果你用的是spring-boot-starter-data-jpa,那麼默認注入的事務管理器就是
class org.springframework.orm.jpa.JpaTransactionManager -
spring-boot-starter-jdbc
如果你用的是spring-boot-starter-data-jpa,那麼默認注入的事務管理器就是
class org.springframework.jdbc.datasource.DataSourceTransactionManager
查看自己的事務管理器
關於這兩個事務管理器的頂級接口都是org.springframework.transaction.PlatformTransactionManager,有興趣的小夥伴可以自己在項目中引入下然後打印一下就可以看得出來自己用的是什麼事務管理器
@Autowired
private PlatformTransactionManager platformTransactionManager;
System.out.println(platformTransactionManager.getClass());
Springboot已經幫我們做了一大半了,接下來就是開啓事務了,如果不開啓,直接進行事務操作(insert,update,delete)的sho時候會直接報錯的,錯誤如下
javax.persistence.TransactionRequiredException: Executing an update/delete query
說的就是事務異常,執行了update/delete 操作,沒有開啓事務造成的
Springboot事務開啓
補充一點:事務的開啓都是基於JDK的動態代理實現的,說白了就是通過調用接口,然後接口通過反射調用接口的實現類實現的。
- 在啓動的方法上添加@EnableTransactionManagement註解
- 在執行事務的方法上添加@Transactional註解