ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • spring java config transaction
    카테고리 없음 2023. 4. 19. 09:55

    spring java config transaction

    저번 포스팅에서 rollback이 안되는 문제 있었다. rollback도 안됐지만 service 계층의 영속성도 안됐다(물론 당연한 얘기지만) 해결은 했는데 잘 모르겠다. RootContext를 버리니 잘 된다. 그래서 다시 책을 봤다. 하지만 안보인다.(대충 봐서) 다시 생각이 나서 김영한님의 github를 봤다. RootContext가 없다. 솔직히 아직 잘 모르겠다. root와 servlet context의 대해.. 토비님 책을 다시 읽어야 겠다. servlet이 하나라면 굳이 분리할 필요도 없다고 하는거 같기도 하고.. 아무튼 지금은 잘모르겠다. 일단 나중에 다시 살펴보겠다. 이렇게 바꾸었다.
    @Configuration
    @EnableWebMvc
    @ComponentScan(
      basePackages = "me.wonwoo.account"
    )
    @Import(RootConfiguration.class)
    public class MvcConfiguration extends WebMvcConfigurerAdapter {
      //...
    }
    
      @Override
      public void onStartup(ServletContext servletContext) throws ServletException {
    //    AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext();
    //    rootContext.register(RootConfiguration.class);
    
        AnnotationConfigWebApplicationContext dispatcherServlet = new AnnotationConfigWebApplicationContext();
        dispatcherServlet.register(MvcConfiguration.class);
        servletContext.addListener(new ContextLoaderListener(dispatcherServlet));
    
       //...
       //...
    }
    
    롤백도 되고 service에 영속성도 된다. 소스가 다시 개판 되었다..ㅡㅡ save하면서 한건입력 후 강제로 에러를 냈다. 아무튼 소스는 다시 올려놔야 겠다.
    @Transactional
    public Account save(Account account) {
      accountRepository.save(account);
      throw new RuntimeException();
    }
    
    에러는 내는 부분
    @Transactional(readOnly = true)
    public Account findOne(Long id) {
      Account one = accountRepository.findOne(id);
      Product order = one.getOrder();
      order.getOrderedName();
      return one;
    }
    
    @OneToOne(fetch = FetchType.LAZY)
    
    service 계층에 영속성 테스트 하는 부분 물론 일단 지금은 EAGER로 바꿔놨다.

    댓글

Designed by Tistory.