Spring FrameWork에서 우리는 애노테이션을 사용하여 하나의 서비스에 대한 트랜잭션 관리를 하게 된다. 로직이 단순할 경우에는 트랜잭션 롤백에 대한 필요성이 적어질 수 있지만, 비즈니스 로직이 클 경우에는 롤백에 대한 중요성이 정말 크다. 예를 들어, A부터 Z까지 비즈니스 로직이 있는데, K 에서 에러가 나면 그 전에 DB에서 작업했던 것들을 취소해야 할 경우 트랜잭션 롤백이 필요하다. 이번 글에서는 정말 간단할 수 있겠찌만, 이런 트랜잭션 롤백 예외 처리하는 것에 대해 기록한다.
목차
1. Exception
2. Transactional
3. 트랜잭션 롤백 예외 처리 하는 방법
1. Exception
우리가 롤백을 하려고 할 때, 사용하는 것이 Exception이다. throw 명령문을 사용하여 특정 Exception을 던져 롤백을 하곤 한다. 물론, 그 비즈니스 로직 메서드 위에는 Transactional이라는 애노테이션이 있어야 하는 건 당연한거다.
throw new XXXException("RollBack");
즉, 아래의 메서드와 같이, 비즈니스 로직에 @Transactional 애노테이션을 선언한 다음에 롤백처리를 한다.
@Transactional
public HashMap TEST01(HashMap map) throws SQLException, JCoException{
HashMap test = new HashMap();
return test;
}
2. Transactional
롤백에 대한 기준은 @Transactional을 선언한 다음부터에 대한 적용이다. 즉, 위의 메서드에서 @Transactional을 선언하여 트랜잭션이 적용되고 있고, 메서드가 비정상적으로 종료 직전에 롤백을 하고, 정상적으로 끝나 종료 직전에 커밋을 한다. 그렇기 때문에, 트랜잭션의 이해가 있어야 롤백이나 커밋을 하는 순간에 대한 것을 알 수 있다.
3. 트랜잭션 롤백 예외 처리 하는 방법
트랜잭션 롤백 예외 처리 하는 방법은 정말 간단하다. 원하는 위치에 exception을 던져서 메서드를 종료시키면 된다.
즉, A부터 Z까지의 비즈니스 로직이 있을 때, H 부분에서 분기 처리를 한다. 성공이면 I로 넘어가고, 성공하지 않으면 지금까지 DB에 작업을 했던 것들을 롤백시키는 것.
@Transactional(rollbackFor = {RuntimeException.class, Exception.class})
public HashMap TEST01(HashMap map) throws SQLException, JCoException{
HashMap test = new HashMap();
...
String str = "H";
if("H".equals(str)) {
if(성공) {
...
} else {
throw new runtimeException("RollBack");
}
}
...
return test;
}
즉, 위와 같이 H 단계에서 분기 처리를 하여 성공하면 넘어가지만, 성공하지 않으면 exception을 던진다. 또한, 어떤 exception에서 롤백을 할 것인지에 대해 명시를 해주면 된다.
@Transactional(rollbackFor = {RuntimeException.class, Exception.class})
'Language > Java' 카테고리의 다른 글
[프로그래머스] 등차수열의 특정한 항만 더하기 자바(JAVA) (0) | 2023.06.07 |
---|---|
[Java] java.lang.OutOfMemoryError: Java heap space 문제 해결하는 방법 (0) | 2023.06.02 |
[Java] Java 트랜잭션 예외 발생 시 DB에 예외 데이터 처리 하는 방법 (0) | 2023.06.01 |
[Java] Java KST 시간에서 연월일 추출하는 방법 (0) | 2023.06.01 |
[Java] Java JCO Key 가져오는 방법(getExportParameterList()) (0) | 2023.05.24 |
[Java] Java HashMap Key 가져오는 방법(Iterator 사용) (0) | 2023.05.22 |
[Java] Java 현재 날짜, 시간 구하는 방법(Java 8버전 미만) (0) | 2023.05.22 |
[Java] Java에서 SAP JCO RFC 인터페이스 통신하는 방법 (0) | 2023.05.16 |
최근댓글