전파 설정이 필요합니다.봄 관리 트랜잭션 @ 트랜잭션 주석
@Transactional(propagation = Propagation.REQUIRED)
트랜잭션 읽기/쓰기입니다.
이러한 시나리오가 사용됩니까? 제발 설명해주세요.
전파 설정이 필요합니다.봄 관리 트랜잭션 @ 트랜잭션 주석
@Transactional(propagation = Propagation.REQUIRED)
트랜잭션 읽기/쓰기입니다.
이러한 시나리오가 사용됩니까? 제발 설명해주세요.
Spring 트랜잭션 기본값은
@Transactional(propagation = Propagation.REQUIRED)
그래서 당신이 전파 속성을 지정할 필요가 없습니다 것입니다.
그래서 스프링 구성 요소의 주석은 무엇입니까? @Transactional
?
스프링 프레임 워크는 새 트랜잭션을 시작하고 모든 방법을 실행하고 마지막으로 트랜잭션을 커밋합니다.
그러나 트랜잭션이 application context
에 없으면 스프링 컨테이너가 새 트랜잭션을 시작합니다.
Propagation.REQUIRED
으로 구성된 경우 논리적으로 각 메서드에 중첩 방식으로 할당 된 트랜잭션 동작은 모두 동일한 실제 트랜잭션을 사용합니다.그래서 결과는 무엇입니까?
결과적으로 중첩 트랜잭션이 실패하면 커밋 대신 전체 트랜잭션이 실패하고 롤백됩니다 (db에 값을 삽입하지 않음).
예 :
@Service
public class ServiceA{
@Transactional(propagation = Propagation.REQUIRED)
public void foo(){
fooB();
}
@Transactional(propagation = Propagation.REQUIRED)
public void fooB(){
//some operation
}
}
설명 : 또한 트랜잭션 불리는 다른 방법 fooB()
트랜잭션 동작 할당이 예 foo()
foo()
및 방법은 내부 . 여기서 fooB()
은 foo()
의 측면에서 중첩 트랜잭션으로 작동합니다. 어떤 이유로 든 fooB()
이 실패하면 foo()
도 커밋하지 못했습니다. 오히려 롤백합니다.
이 주석은 데이터베이스 트랜잭션을 관리하는 데 도움이되는 것입니다.
는 봄 서비스 콩의 작은 예입니다 당신이 당신의 데이터베이스에 기록 서비스 콩이 있고 쓰기가 다음 여기에
@Transactional(propagation = Propagation.REQUIRED)
를 사용하여 트랜잭션 내에서 수행되고 있는지 확인하려면 말할 수 있습니다 .
이@Service
class MyService {
@Transactional(propagation = Propagation.REQUIRED)
public void writeStuff() {
// write something to your database
}
}
Transactional
주석은 것을 봄을 알려줍니다.