2012-06-08 5 views
2

나는 봄/동면을 사용하고 있습니다. 서비스 레이어와 DAO 레이어가 있습니다. 트랜잭션은 서비스 계층에 배치됩니다. FirstServiceImpl 클래스가 있습니다. FirstServiceImpl 클래스의 메소드 중 하나에는 500 줄의 코드가 있습니다. 내가 한 일은 500 줄의 코드를 모두 가져 와서 별도의 클래스에 넣었던 것입니다 (하나의 인터페이스와 구현 클래스를 작성했습니다. FirstServiceImpl 클래스에서는 새로 작성된 인터페이스를 사용하여 단일 메소드에 액세스했습니다). FirstServiceImpl 클래스에 @Transactional을 배치했습니다.Spring 트랜잭션 컨텍스트 래핑?

제 질문은 "새로 만든 클래스 논리가 트랜잭션 컨텍스트에서도 실행됩니까?"입니다.

감사합니다.

답변

0

잘 모르겠지만 transaction propagation을 사용한다고 생각합니다. 그러나 그것이 작동하는지 여부를 테스트하는 확실한 방법을 말할 수 있습니다.

단일 트랜잭션에서 코드를 통해 데이터베이스 작업을 수행하십시오.

db에 한 행을 삽입/업데이트하고 동일한 트랜잭션에서 두 번째 행을 삽입/업데이트하십시오.

의도적으로 두 번째 행을 삽입하는 동안 예외가 발생합니다. 데이터베이스에서 "첫 번째 항목"을 볼 수 있으면 트랜잭션이 롤백되지 않음을 의미합니다. 그리고 그것은 작동하지 않습니다.

데이터베이스에 첫 번째 행 항목이 없으면 트랜잭션이 롤백됨을 의미합니다. 여기에 UnexpectedRollbackException이 표시 될 수 있습니다. 테스트 전에

은 주석이 @Transactional(propagation=Propagation.REQUIRED)

있는지 확인
관련 문제