@Transactional Annotation 사용시에 try,catch 블록을 사용하면 유효하게 동작하지 않습니다.
예를 들면 Service 영역에서 , 아래와 같은 형식으로 dao를 여러 번 호출 하여 INSERT 또는 UPDATE를 진행 하는 과정에서 어느단계에서라도 수행 실패 시에 전수 rollback 처리를 하기를 원한다면 , try , catch 블록을 사용하지 않고 throws Exception으로 처리하는 것이 방법이라고 생각 됩니다.
@Transactional
@Override
public booelan insertTest(Map<String,Object param) throws Exception {
dao.aUpdate(param);
dao.bInsert(param);
boolean[] bResult = { true };
// @Transactional 로 처리시에는 try , catch 사용시에 정상적으로 rollback 이 되지 않음
/*
Arrays.asList("A","B","C","D).forEach(a -> {
// lambda forEach 안에서는 무조건 try,catch 로 묶어야 오류 발생하지 않음
try {
dao.cInsert(param);
} catch(Exception exception) {
bResult[0] = false;
}
});
// 강제로 Exception 을 발생 시켜도 rollback 이 되지 않았습니다.
if(!bResult[0]) throw new Exception();
*/
// 아래와 같이 for 문으로 처리 하였을시에 Exception 이 발생하면 이전에 수행되었던 Transaction 에 대하여
// rollback 수행이 되었습니다.
List<String> asList = Arrays.asList("A","B","C","D");
for(String a : asList) {
dao.cInsert(param);
}
}
'JAVA' 카테고리의 다른 글
[ASP.NET,SpringBoot] WAS에서 파일 다운로드 처리 시에 한글 깨짐 조치 방안 (1) | 2024.03.12 |
---|---|
openjdk 1.8 이용하여 SQL Server 접속 시도 시에 오류 발생 조치 방안 (0) | 2024.03.10 |
Windows Tibero Studio 실행 시 오류 발생 시에 대처 방안 ( JDK 경로 설정으로 해결 하였습니다. ) (0) | 2024.01.30 |
[Mybatis] ? 물음표 기호 처리 방안 [ Oracle , Tibero ] (1) | 2024.01.09 |
MimeMessage , Multipart , MimeBodyPart 를 이용한 HTML 메일 본문 , 이미지 , 첨부파일 전송 예제 (0) | 2023.12.17 |