筆者之前從原理的層面講解過Spring的事務處理,包括編程式事務處理和聲明式事務處理,詳見博客 Spring事務處理-編程式事務和聲明式事務。這篇文章從原理的層面講解了Spring的事務管理機制,讀完了這篇博客,筆者可以一針見血的使用spring的處理機制。
今天這篇博客僅僅是Spring聲明式處理的正常使用,偏向工程的使用說明。還是以最近的幾篇博客中常用的test工程爲例,具體如下:
首先,第一步:在service層中需要事務管理的方法上添加註解@Transactional,下面是test工程中test-service子模塊的UserServiceImpl類中的一個方法:
@Override
@Transactional
public HttpResult<Boolean> testTransaction(UserCreateReqDTO userCreateReqDTO) {
if (userCreateReqDTO == null) {
return HttpResult.successResult(Boolean.FALSE);
}
UserDO userDO = UserConvent.conventToUserDO(userCreateReqDTO);
if (userDao.createUser(userDO)) {
throw new SystemException(ErrorEnum.TEST_TRANSACTION);
// return HttpResult.successResult(Boolean.TRUE);
}
return HttpResult.successResult(Boolean.FALSE);
}
其實@Transactional註解是有參數的,可以不寫,這樣Spring將使用默認參數,也是最最常用的參數。關於參數的具體介紹,請參見我的博客點擊打開鏈接
然後,第二步:在spring的配置文件中添加如下內容:
<!--事務相關-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"
p:dataSource-ref="defaultDataSource"/>
<tx:annotation-driven transaction-manager="transactionManager"/>
在上面的文件中,第一條語句是通知spring框架對數據源defaultDataSource進行事務管理,要注意的是:這裏的defaultDataSource就是mybaties使用的數據源。在上面的文件中,第二條語句是通知spring框架使用聲明式事務管理,也就是在代碼中使用@Transactional註解的形式聲明事務。
以後,在所有需要進行事務管理的方法上使用@Transactional紓解就可以了。有木有很方便。
至此,spring聲明式事務管理就配置完了。
覺得本文不錯的話,別忘了關注我哦。
代碼參見本人的github。點擊打開鏈接
筆者開設了一個知乎live,詳細的介紹的JAVA從入門到精通該如何學,學什麼?
提供給想深入學習和提高JAVA能力的同學,歡迎收聽https://www.zhihu.com/lives/932192204248682496