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 メソッドを呼び出す代わりに、顧客の挿入時に再試行が失敗する
適切に再試行可能にすることは可能ですか?