본문 바로가기

Spring64

쓰레드 로컬 - ThreadLocal ※문제 : TraceId 를 파라미터로 넘기지 않는 방법? FieldLogTrace @Slf4j public class FieldLogTrace implements LogTrace { private static final String START_PREFIX = "-->"; private static final String COMPLETE_PREFIX = ""; private static final String COMPLETE_PREFIX = " 2023. 8. 12.
예제 만들기 로그 추적기 만들기 정상 요청 [796bccd9] OrderController.request() [796bccd9] |-->OrderService.orderItem() [796bccd9] | |-->OrderRepository.save() [796bccd9] | |OrderRepository.save() [b7119f27] | |hello2 [0314baf6] |hello2 [37ccb357] |OrderService.orderItem() [c80f5dbb] | |-->OrderRepository.save() [c80f5dbb] | |OrderRepository.save() [ca867d59] | | 2023. 8. 12.
스프링 트랜잭션 전파2 - 활용 커밋, 롤백 @Transactional과 REQUIRED REQUIRED 는 기존 트랜잭션이 없으면 새로운 트랜잭션을 만들고, 기존 트랜잭션이 있으면 참여한다. @Transactional(propagation = Propagation.REQUIRED) == @Transactional 서비스 계층에 트랜잭션이 없을 때 - 롤백 이 경우 회원은 저장되지만, 회원 이력 로그는 롤백된다. 따라서 데이터 정합성에 문제가 발생 둘을 하나의 트랜잭션으로 묶어서 처리해보자. 단일 트랜잭션 각각 트랜잭션이 필요한 상황 Repository & Service 모두 트랜잭션이 필요한 경우 클라이언트 A : MemberService 에 트랜잭션을 남기고, MemberRepository , LogRepository 의 트랜잭션 .. 2023. 8. 12.
스프링 트랜잭션 전파1 - 기본 트랜잭션 두 번 사용 double_commit() @Test void double_commit() { log.info("트랜잭션1 시작"); TransactionStatus tx1 = txManager.getTransaction(new DefaultTransactionAttribute()); log.info("트랜잭션1 커밋"); txManager.commit(tx1); log.info("트랜잭션2 시작"); TransactionStatus tx2 = txManager.getTransaction(new DefaultTransactionAttribute()); log.info("트랜잭션2 커밋"); txManager.commit(tx2); } 트랜잭션1 트랜잭션1을 시작하고, 커넥션 풀에서 conn0 커넥.. 2023. 8. 11.