1

JpaOptimisticLockingFailureException が発生した場合にトランザクション サービス メソッドをリトライしたい

サービスメソッドに @Retryable アノテーションを付けると

@Retryable(value = JpaOptimisticLockingFailureException.class, maxAttempts = 3, backoff = @Backoff(delay = 500, maxDelay = 1000))
Account create(AccountDtoCreate dto);

サービスメソッドは次のロジックを実行します

@Transactional
public Account create(AccountDtoCreate dto) {
    Account account = mapper.map(dto, Account.class);

    Schema schema = schemaService.getByCode(dto.getSchemaCode());       
    account.getSchemas().add(schema);

    Customer customer = customerService.findOrCreate(dto.getCustomer());
    account.setCustomer(customer);

    Account savedAccount = repository.save(account);
    repository.flush();
    return savedAccount;
    }
}

一度に 2 つのリクエストを実行します (JpaOptimisticLockingFailureException が発生する状況を作成します)。

最初のトランザクションはコミットされ、2 番目は JpaOptimisticLockingFailureException をスローして再試行します。

findOrCreate メソッドまたは getByCode メソッドを呼び出す代わりに、顧客の挿入時に再試行が失敗する

適切に再試行可能にすることは可能ですか?

4

1 に答える 1