RuntimeException : rollback처리가 됨
CheckedException : rollback처리가 되지 않음 (rollback을 하고싶으면 rollbackfor())
@Transactional (rollbackFor = Exception.class)
아래와 같이 빈 메서드를 통해 메서드를 호출하는 경우 Transactional이 적용되지 않는다.
public void put(){
this.putBookAndAuthor();
}
isolation() 속성
propagation() 속성
isolation()
: 격리
transaction 격리 단계라고도 한다.
동시에 발생하는 트랜잭션간의 데이터 접근을 어떤 식으로 정리할 것인지 정리해준다.
isolation의 Enum을 보면
- DEFAULT : DB데이터 베이스의 Default 격리단계를 따라간다.
- READ_UMCOMMITTED: (Level0)
- READ_COMMITTED: (Level1)
- REPEATABLE_READ: (Level2)
- SERIALIZABLE:(Level3)
Level이 증가할수록 격리단계가 강력해지고 데이터의 정확성을 보장해주는 대신, 동시처리하는 성능이 하락한다.
반다로 Level이 하락할수록 성능은 향상되지만, 일부 데이터의 정확성이 보장하지 못하는 경우가 발생할 수 있다.
isolationTest
@Test
void isolationTest(){
Book book = new Book();
book.setName("JPA강의");
bookRepository.save(book);
bookService.get(1L); //DB를 지우고 바로 테스트를 하기 때문에 book의 정보가 1번
System.out.println(">>> " + bookRepository.findAll());
}
BookService.java
@Transactional
public void get(Long id){
System.out.println(">>> "+bookRepository.findById(id));
System.out.println(">>> "+bookRepository.findByAll());
System.out.println(">>> "+bookRepository.findByAId(id));
System.out.println(">>> "+bookRepository.findByAll());
}
#패스트캠퍼스 #패캠챌린지 #직장인인강 #직장인자기계발 #패스트캠퍼스후기 #한번에끝내는Java/Spring웹개발마스터초격차패키지Online
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.