그냥 뭐 비슷함
@GetMapping("/v3/request")
public String request(@RequestParam("itemId") String itemId){
TraceStatus status = null;
try{
status = trace.begin("OrderController.request()");
orderService.orderItem(itemId);
trace.end(status);
return "ok";
} catch (Exception e){
trace.exception(status, e);
throw e;
}
}
begin, 컨트롤러에서 처음 호출 하는 거니 new 해서 새로 holder에 들어갈 거고,
서비스
public void orderItem(String itemId){
TraceStatus status = null;
try{
status = trace.begin("OrderService.orderItem()");
orderRepository.save(itemId);
trace.end(status);
} catch (Exception e){
trace.exception(status, e);
throw e;
}
}
이제 보면 begin안에 sync(holder에 없으면 새로 만들고 있으면 레벨 올리고)가 따로 있기 때문에, 그냥 begin으로 호출하면 된다.
리포지토리
public void save(String itemId){
TraceStatus status = null;
try{
status = trace.begin("OrderRepository.save()"); // 현재 메소드 명
if(itemId.equals("ex")){
throw new IllegalStateException("예외 발생!!");
}
sleep(1000);
trace.end(status);
} catch (Exception e){
trace.exception(status, e);
throw e;
}
}
다른 점은 이제 beginSync가 아니라 begin으로 호출하고, 또 따로 traceId 객체를 받지 않는다.
'스프링 > 스프링 핵심 원리 - 고급편' 카테고리의 다른 글
12. 동시성 문제 예시 (0) | 2024.01.14 |
---|---|
11. 동시성 문제 (0) | 2024.01.14 |
9. 필드 동기화 (0) | 2024.01.14 |
8. V2 정리 (0) | 2024.01.14 |
7. V2 적용 (0) | 2024.01.14 |