Spring Cloud Spring Cloud Spanner 交易

2024-01-11 14:55 更新

SpannerOperations提供了在單個事務(wù)中運行java.util.Function對象的方法,同時使來自SpannerOperations的讀取和寫入方法可用。

讀/寫事務(wù)

SpannerOperations通過performReadWriteTransaction方法提供讀寫事務(wù):

@Autowired
SpannerOperations mySpannerOperations;

public String doWorkInsideTransaction() {
  return mySpannerOperations.performReadWriteTransaction(
    transActionSpannerOperations -> {
      // Work with transActionSpannerOperations here.
      // It is also a SpannerOperations object.

      return "transaction completed";
    }
  );
}

performReadWriteTransaction方法接受Function對象,該對象提供了SpannerOperations對象的實例。函數(shù)的最終返回值和類型由用戶確定。 您可以像常規(guī)的SpannerOperations一樣使用此對象,但有一些例外:

  • 它的讀取功能無法執(zhí)行陳舊的讀取,因為所有讀取和寫入都在事務(wù)的單個時間點進行。
  • 它無法通過performReadWriteTransactionperformReadOnlyTransaction執(zhí)行子交易。

由于這些讀寫事務(wù)正在鎖定,因此如果函數(shù)不執(zhí)行任何寫操作,則建議您使用performReadOnlyTransaction

只讀交易

performReadOnlyTransaction方法用于使用SpannerOperations執(zhí)行只讀事務(wù):

@Autowired
SpannerOperations mySpannerOperations;

public String doWorkInsideTransaction() {
  return mySpannerOperations.performReadOnlyTransaction(
    transActionSpannerOperations -> {
      // Work with transActionSpannerOperations here.
      // It is also a SpannerOperations object.

      return "transaction completed";
    }
  );
}

performReadOnlyTransaction方法接受提供SpannerOperations對象實例的Function。此方法還接受ReadOptions對象,但是唯一使用的屬性是用于及時確定快照以在事務(wù)中執(zhí)行讀取的時間戳記。 如果未在讀取選項中設(shè)置時間戳,則將針對數(shù)據(jù)庫的當前狀態(tài)運行事務(wù)。函數(shù)的最終返回值和類型由用戶確定。您可以像使用普通SpannerOperations一樣使用此對象,但有一些例外:

  • 它的讀取功能無法執(zhí)行陳舊的讀取,因為所有讀取都在事務(wù)的單個時間點發(fā)生。
  • 它無法通過performReadWriteTransactionperformReadOnlyTransaction執(zhí)行子交易
  • 它無法執(zhí)行任何寫操作。

由于只讀事務(wù)是非鎖定的,并且可以在過去的某個時間點執(zhí)行,因此建議將這些事務(wù)用于不執(zhí)行寫操作的功能。

帶有@Transactional批注的聲明式事務(wù)

此功能需要使用spring-cloud-gcp-starter-data-spanner時提供的SpannerTransactionManager中的bean。

SpannerTemplateSpannerRepository通過@Transactional [注釋](https://docs.spring.io/spring/docs/current/spring-framework-reference/data-access.html#交易聲明式)作為交易。如果用@Transactional注釋的方法調(diào)用了也注釋的另一個方法,則這兩種方法將在同一事務(wù)中工作。 performReadOnlyTransactionperformReadWriteTransaction無法在帶注釋的@Transactional方法中使用,因為Cloud Spanner不支持事務(wù)內(nèi)的事務(wù)。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號