Spring Cloud Spring Cloud Spanner 交易

2024-01-11 14:55 更新

SpannerOperations提供了在單個(gè)事務(wù)中運(yùn)行java.util.Function對(duì)象的方法,同時(shí)使來(lái)自SpannerOperations的讀取和寫入方法可用。

讀/寫事務(wù)

SpannerOperations通過(guò)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對(duì)象,該對(duì)象提供了SpannerOperations對(duì)象的實(shí)例。函數(shù)的最終返回值和類型由用戶確定。 您可以像常規(guī)的SpannerOperations一樣使用此對(duì)象,但有一些例外:

  • 它的讀取功能無(wú)法執(zhí)行陳舊的讀取,因?yàn)樗凶x取和寫入都在事務(wù)的單個(gè)時(shí)間點(diǎn)進(jìn)行。
  • 它無(wú)法通過(guò)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對(duì)象實(shí)例的Function。此方法還接受ReadOptions對(duì)象,但是唯一使用的屬性是用于及時(shí)確定快照以在事務(wù)中執(zhí)行讀取的時(shí)間戳記。 如果未在讀取選項(xiàng)中設(shè)置時(shí)間戳,則將針對(duì)數(shù)據(jù)庫(kù)的當(dāng)前狀態(tài)運(yùn)行事務(wù)。函數(shù)的最終返回值和類型由用戶確定。您可以像使用普通SpannerOperations一樣使用此對(duì)象,但有一些例外:

  • 它的讀取功能無(wú)法執(zhí)行陳舊的讀取,因?yàn)樗凶x取都在事務(wù)的單個(gè)時(shí)間點(diǎn)發(fā)生。
  • 它無(wú)法通過(guò)performReadWriteTransactionperformReadOnlyTransaction執(zhí)行子交易
  • 它無(wú)法執(zhí)行任何寫操作。

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

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

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

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

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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)