내 경우와 비슷한게 있어서 다른 블로그 글을 첨부한다.
추가적으로 내 코드에는
@Transactional 에 옵션을 달지 않았다. 필요하면 옵션 검색해서 달기 바란다.
해결 - try...catch 문에서 Exception을 catch 하고 증발시켜버려서 Spring 이 예외를 감지하지 못한거였다.
기존 소스
@Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor={Exception.class})
public int insertAndUpdate() {
try {
insert();
update();
return 1;
} catch (Exception e) {
e.printStackTrace();
return 0;
}
}
public void insert() throws Exception {
// db insert
}
public void update() throws Exception {
throw new Exception();
}
insertAndUpdate()는 항상 새로운 트랜잭션을 가져야하기 때문에 propagation=Propagation.REQUIRED_NEW 로 설정
Exception.class 예외가 발생했을 때 rollback 하기 위해서 rollbackFor={Exception.class} 로 설정
update() 메소드에서 강제로 Exception 발생을 시켰는데 insert() 메소드를 통해 DB에 등록된 값이 rollback이 되지 않는 것....
try...catch 문에서 Exception을 catch 하고 증발시켜버려서 Spring 이 예외를 감지하지 못한거였다.
수정 소스
@Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor={Exception.class})
public int insertAndUpdate() throws Exception {
try {
insert();
update();
return 1;
} catch (Exception e) {
e.printStackTrace();
throw new Exception(); // Spring에 던져준다
}
}
public void insert() throws Exception {
// db insert
}
public void update() throws Exception {
throw new Exception();
}
출처: https://sbs20011.tistory.com/entry/Spring-Transaction-이-왜-안먹지 [STRA]
출처: https://sbs20011.tistory.com/entry/Spring-Transaction-이-왜-안먹지 [STRA]
잘 작동한다
-------------- 2019-04-17 추가
위 부분 문제가 되기 전에 삽질을 했던 것이 생각나서 추가함.
servlet-context.xml 에 component-scan 을 package 전체를 잡아놔서 안된 것도 있었다.
<!-- servlet-context.xml -->
<context:component-scan base-package="com.tistory.sbs20011" />
servlet context에는 controller 만 추가하고, 그 외는 application context에 추가한다
<!-- servlet-context.xml -->
<context:component-scan base-package="com.tistory.sbs20011.controller" />
<!-- root-context.xml -->
<context:component-scan base-package="com.tistory.sbs20011.biz" />
<context:component-scan base-package="com.tistory.sbs20011.dao" />
<context:component-scan base-package="com.tistory.sbs20011.service" />
출처: https://sbs20011.tistory.com/entry/Spring-Transaction-이-왜-안먹지 [STRA]
'Web > SpringBoot' 카테고리의 다른 글
Configure Pod readiness with Spring Actuator (0) | 2019.11.20 |
---|---|
[springboot] healthcheck ,actuator, kubernetes 헬스 체크 하여 pod 롤링 업데이트 403 에러 - 2/2 (0) | 2019.11.18 |
[springboot] healthcheck ,actuator, kubernetes 헬스 체크 하여 pod 롤링 업데이트 502 에러 - 1/2 (0) | 2019.10.30 |
[springboot] 서버 시작시 Error creating bean with name '***' defined in class path resource 해결법 (0) | 2019.08.28 |
[spring] produces (0) | 2019.08.13 |
댓글