Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

개발자되기 프로젝트

ThreadLocal - 적용 본문

인프런/[인프런] 스프링 핵심 원리 - 고급

ThreadLocal - 적용

Seung__ 2021. 11. 22. 16:11

1. Configuration 변경


  • 동시성 문제가 있는 FieldLogTrace 대신에 
  • ThreadLocalLogTrace 를 스프링 빈으로 등록하자.
  • Configuration을 제외하고 코드 변경 없이 구현을 변경할 수 있다. - 다형성, ocp 준수!
@Configuration
public class LogTraceConfig {

    @Bean
    public LogTrace logTrace(){
        return new ThreadLocalLogTrace();
    }
}

 

2. 실행 결과


  • 동시성 문제가 발생하도록 요청을 여러 번 보낸다.
  • 이 전과는 다르게 level이 누적되지 않고, traceId가 중복으로 사용되지 않는다.
[io-8080-exec-10] : [d278b1ae] OrderController.request()
[io-8080-exec-10] : [d278b1ae] |-->OrderService.orderItem()
[io-8080-exec-10] : [d278b1ae] |  |-->OrderRepository.save()
[nio-8080-exec-1] : [8172f254] OrderController.request()
[nio-8080-exec-1] : [8172f254] |-->OrderService.orderItem()
[nio-8080-exec-1] : [8172f254] |  |-->OrderRepository.save()
[io-8080-exec-10] : [d278b1ae] |  |<--OrderRepository.save() time=1011ms
[io-8080-exec-10] : [d278b1ae] |<--OrderService.orderItem() time=1011ms
[io-8080-exec-10] : [d278b1ae] OrderController.request() time=1012ms
[nio-8080-exec-1] : [8172f254] |  |<--OrderRepository.save() time=1004ms
[nio-8080-exec-1] : [8172f254] |<--OrderService.orderItem() time=1005ms
[nio-8080-exec-1] : [8172f254] OrderController.request() time=1005ms
  • Thread 별로 구분해서 보면 의도대로 실행이 되었다.
[io-8080-exec-10] : [d278b1ae] OrderController.request()
[io-8080-exec-10] : [d278b1ae] |-->OrderService.orderItem()
[io-8080-exec-10] : [d278b1ae] |  |-->OrderRepository.save()
[io-8080-exec-10] : [d278b1ae] |  |<--OrderRepository.save() time=1011ms
[io-8080-exec-10] : [d278b1ae] |<--OrderService.orderItem() time=1011ms
[io-8080-exec-10] : [d278b1ae] OrderController.request() time=1012ms

[nio-8080-exec-1] : [8172f254] OrderController.request()
[nio-8080-exec-1] : [8172f254] |-->OrderService.orderItem()
[nio-8080-exec-1] : [8172f254] |  |-->OrderRepository.save()
[nio-8080-exec-1] : [8172f254] |  |<--OrderRepository.save() time=1004ms
[nio-8080-exec-1] : [8172f254] |<--OrderService.orderItem() time=1005ms
[nio-8080-exec-1] : [8172f254] OrderController.request() time=1005ms

 

 

 

3. GitHub : 211122 Thread Local


 

GitHub - bsh6463/Spring_Advanced: initial

initial. Contribute to bsh6463/Spring_Advanced development by creating an account on GitHub.

github.com

 

'인프런 > [인프런] 스프링 핵심 원리 - 고급' 카테고리의 다른 글

Template Method - 시작  (0) 2021.11.22
ThreadLocal - 주의사항  (0) 2021.11.22
ThreadLocal - 개발  (0) 2021.11.22
ThreadLocal - 예제  (0) 2021.11.22
Thread Local - 소개  (0) 2021.11.22
Comments