전파 속성 | 설명 |
REQUIRED (Default) | 트랜잭션의 시작 시점에 이미 진행중인 트랜잭션이 잇으면 해당 트랜잭션에 참여하며 없을 경우 새로운 트랜잭션을 시작한다. |
REQUIRES_NEW | 항상 새로운 트랜잭션을 시작한다. 이미 진행중인 트랜잭션이 있다면 잠깐 보류되고 해당 트랜잭션 경계가 종료 된 후 다시 시작횐다. |
SUPPORT | 이미 진행중인 트랜잭션이 있으면 참여하고, 없을 경우 Non-transaction으로 시작한다. |
MANDATORY | 이미 진행중인 트랜잭션이 반드시 있어야만 해당 경계를 넘어 시작할 수 있다. 없을 경우 Exception을 발생 시킨다. |
NOT_SUPPORT | Non-transaction으로 시작하며, 이미 진행중인 트랜잭션이 있으면 잠시 보류 시킨다. |
NEVER | Non-transaction 상테에서만 새당 경계를 넘어갈 수 있다. 이미 진행중인 트랜잭션이 있으면 예외를 발생 시킨다. |
NESTED | 이미 진행중인 트랜잭션이 있을 경우 중첨 트랜잭션을 생성하여 시작한다. 생성된 중첨 트랜잭션언 (parent)가 rollback되면 함께 되지만, 해당 트랜잭션안에서의 commit/rollback은 (parent)에 영항을 주지 않는다. 이미 진행중인 트랜잭션이 없을 경우 새로운 트랜잭션을 만든다. |
격리 수준 | 설명 |
DEFAULT | 사용하는 데이터 엑세스 기술 또는 DB 드라이버의 기본 설정을 따른다. 대부분 DB는 READ_COMMITTED를 기본으로 한다. |
READ_UNCOMMITTED | 가장 낮은 격리수준이다. 트랜잭션의 종료에 따른 commit/rollback이 이루어지지 않아도 해당 변화가 ㅏ다른 트랜잭션에 노출된다. (성능은 가장 좋다) |
READ_COMMITTED | commit/rollback이 이루어지지 않은 정보는 다른 트랜잭션에서 읽을 수 없다. 서로 다른 트랜잭션이 동시에 row를 핸들링하는 경우 의도치 않은 결과가 올 수 있다. |
REPEATABLE_READ | 하나의 트랜잭션이 읽은 row를 다른 트랜잭션이 수정하는 것을 막아준다 하짐나 새로운 row 추가는 제한 않는다. SELECT 후 타 트랜잭션에서 추가로 결과가 달라질 수 있다. |
SERIALIZABLE | 가장 강력한 격리 수준이다. 순차적으로 진행해서 여러 트랜잭션이 동시에 같은 테이블 정보를 엑세스하지 못하게 한다. (성능은 가장 낮다) |
속성 | 설명 |
rollbackFor (rollback 조건-Exception 변경) | rollback이 이루어지는 Exception을 변경한다. |
noRollbackFor (commit 조건-Exception 변경) | commit이 이루어지는 Exception을 추가한다. |
@Transactional
public void batchEvent(){
try{
apiCallAndAddEvents();
apiCallAndAddSubjcode();
commService.addBatchJobLog("OK");
} catch(Exception e){
commService.addBatchJobLog("FAIL");
throw new RuntimeException(e);
}
}
트랜잭션 이해 (0) | 2025.01.05 |
---|---|
DataSource 이해 (0) | 2024.11.30 |
커넥션 풀 (0) | 2024.11.17 |
Spring Transaction 사용 시 주의할 점 (0) | 2021.09.25 |
댓글 영역