(Spring) Transactional 사용법
2022. 8. 10. 00:16ㆍSpring
반응형
Transactional.
이 어노테이션을 왜 붙이는 지 모른다면, 트랜잭션에 대한 이해도가 부족한 것일 수 있다.
Transaction에 대한 이해가 필요하다면 아래 문서를 참고해보자.
그럼 트랜잭션에 대해서 안다고 가정하고 시작하겠다!
@Transactional
스프링에서는 트랜잭션 처리를 간편하게 어노테이션으로 처리할 수 있다.
아래 코드를 보자.
@Service
@Transactional(readOnly = true)
public class UserService{
@Autowired
private UserRepository userRepository;
@Transactional
public User getUser(Long id) {
return userRepository.findById(id)
.orElseThrow(() -> new UserNotFoundException(id));
}
@Transactional(isolation = Isolation.REPEATABLE_READ)
public User createUser(UserData userData) {
User user = mapper.map(userData, User.class);
return userRepository.save(user);
}
Transactional 어노테이션은 클래스에서도, 메서드에서도 사용할 수 있다
하지만 Public인 클래스 혹은 메서드에만 사용할 수 있다.
그리고 코드에서 확인할 수 있지만, 클래스 레벨과 메서드 레벨에 동시에 어노테이션이 붙은 것을 확인 할 수 있다.
이럴 때는 우선순위가 중요해진다.
우선순위는 다음과 같다.
- 클래스 메서드(static)
- 클래스
- 인터페이스 메서드
- 인터페이스
@어떻게 사용하나요?
Type | element | |
Isolation | isolation | 격리 수준 |
String[] | label | |
Class<? extends Throwable> [] | noRollbackFor | 롤백이 수행되지 않아야 하는 클래스의 배열 |
String[] | noRollbackForClassName | 롤백이 수행되지 않아야 하는 클래스 이름의 배열 |
Propagation | propagation | 전파 타입 |
boolean | readOnly | 일기 / 쓰기 설정 |
Class<? extends Throwable> | rollbackFor | 롤백이 수행 되어야 하는 클래스의 배열 |
String[] | rollbackForClassName | 롭갱시 수행 되어야 하는 클래스 이름의 배열 |
int | timeout | 타임 아웃 시간 |
String | timetoutString | 타임 아웃 시간에 대한 String |
String | transactionManager | |
String | value |
각각 하나하나 상세하게 사용법을 서술하고 싶지만 시간이 여유치 않아서 공식문서 링크로 대체한다.
반응형
'Spring' 카테고리의 다른 글
(Spring) JpaRepository는 인터페이스인데 어떻게 동작할까? (0) | 2023.08.31 |
---|---|
(Spring) JPA exists를 최적화하는 여러가지 방법들 (0) | 2022.11.05 |
(Spring) DI/의존 객체 주입 패턴 + Lombok (0) | 2022.09.20 |
(Spring) Why Maven? Why Gradle? (0) | 2022.08.07 |
(Spring) MVC에 대해서 (0) | 2022.02.21 |