# 애플리케이션이 준 정책을 넣고, 그 정책이 불리는지 센다 AtomicInteger workCalls = new AtomicInteger(); JpaRetryPolicy customPolicy = (failure, attempt) -> { policyCalls.incrementAndGet(); return RetryDecision.fail("application policy says do not retry"); }; var profile = TransactionProfile.write("order.write", Duration.ofSeconds(5)) .withRetryProfile(RetryProfile.boundedContention("order.write", 2)); 애플리케이션 정책 호출 : 0 작업 호출 : 2 최종 예외 : SerializationFailureException # 플랫폼이 자기 빈에 넣는 기본 프로파일 @ConditionalOnMissingBean @ConditionalOnBean(SpringJpaTransactionExecutor.class) public FullTransactionRetryCoordinator jpaRetryCoordinator( SpringJpaTransactionExecutor executor, RetryEventListener retryListener, Clock clock) { return new JpaTransactionAutoConfiguration(clock) .retryCoordinator( executor, dev.caskeleton.adapter.outbound.persistence.api.transaction.RetryProfile .boundedContention("jpa-platform-default", 3), retryListener); }