RESOURCE_LOCAL JPA 事務型別

banq發表於2024-10-19


這篇文章詳細分析了在Spring Boot或Spring Data JPA中預設使用的RESOURCE_LOCAL事務型別是如何工作的。

文章首先介紹了JPA事務型別的背景,提到JPA 1.0規範釋出時有兩種事務型別:JTA(Java Transaction API)和RESOURCE_LOCAL。JTA允許跨多個資料庫連線、快取或JMS佇列進行全域性事務管理。使用JTA時,需要在persistence.xml檔案中進行特定的配置。

如果不需要全域性事務,JPA提供了RESOURCE_LOCAL事務型別,它可以使用單個資料庫連線進行操作。選擇這種事務模式時,需要將transaction-type屬性設定為RESOURCE_LOCAL,並使用指向JDBC DataSource的non-jta-data-source元素。

使用RESOURCE_LOCAL事務型別時,JDBC Connection如何管理底層資料庫事務?

  • 預設情況下,JDBC Connection使用自動提交模式,JPA提供者會禁用它(如果之前沒有被禁用)。
  • 資料庫連線繫結到當前執行的執行緒,並用於所有語句執行,直到事務結束。

在工作單元結束時,如果沒有檢測到失敗,將呼叫關聯JDBC Connection上的commit方法,資料庫事務也將被提交。如果檢測到失敗,則呼叫rollback方法。

使用RESOURCE_LOCAL事務型別時,資料庫事務由底層JDBC Connection管理。

在Spring中,TransactionInterceptor將呼叫底層TransactionManager的commit或rollback。

  • 對於RESOURCE_LOCAL事務型別,Spring提供了JpaTransactionManager,
  • 而對於JTA,則必須使用JtaTransactionManager。

詳細點選標題

相關文章