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로 바꿔놨다.