2017-09-22 2 views
1

내 서비스 클래스에 메서드가 있습니다.Spring의 @Transactional에 주석이 달린 메소드 내에서 던져져 catch 된 체크되지 않은 예외가 여전히 트랜잭션을 롤백 시키게할까요?

@Transactional 
public void serviceMethod { 
    dao.daoMethod(); 
} 

public void daoMethod() {//dao.daoMethod 
    //some code 
    try { 
     //some more code that throws an unchecked exception 
    } catch(Exception exception) { 
     //do something -- no exceptions generated/thrown from here 
    } 
    //some more code 
} 

이로 인해 트랜잭션이 롤백됩니까? try 블록에서 호출 된 메서드 내에서 Unchecked 예외가 발생하면 다른 예외가 발생합니까?

답변

2

아니요, 캐치되지 않은 예외의 경우에만 트랜잭션이 롤백됩니다.

트랜잭션 방식의 인터셉터는 주석이 달린 메서드 호출을 "감싸는"; 그들은 안에을 어떻게 볼 수 없습니다.

+1

헤이 Haroldo, 감사합니다. 나는 그것을 파고들 것이다. – sarkardebanjan

1

예외가 발생하면 자동으로 무시됩니다. 너는 catch 블록 안쪽에 아무것도하지 않았다. 이것은 전혀 권장되지 않습니다.

+0

안녕하세요. 요한네스입니다. 귀하의 답변에 감사드립니다. 법적인 이유로 여기에 실제 코드를 넣을 수는 없지만 실제로는 감사 및 향후 조치에 대한 예외를 기록하고 거기에서 예외가 발생하지 않을 것으로 예상합니다. – sarkardebanjan

+0

throw 된 예외가 확인되지 않은 예외 인 경우에만 트랜잭션이 롤백됩니다. 또한, catch 블록 안에는 검사되지 않은 예외가 발생했을 때 롤백하기 위해 로그 메시지 다음에 체크되지 않은 예외가 발생합니다. 이 https://www.catalysts.cc/en/wissenswertes/spring-transactional-rollback-on-checked-exceptions/도 참조하십시오. –

1

try-catch 블록에서 Exception을 catch하고이 Exception을 처리 할 몇 가지 작업을 수행하면 롤백이 발생하지 않습니다. RuntimeException이있는 경우 기본적으로 롤백이 발생합니다.

롤백을 일으키는 예외를 지정할 수 있습니다. @Transactional (rollbackFor = MyCheckedException.class) 대답뿐만 아니라 그 뒤에 설명은

https://resourcepool.io/2014/11/16/java-quickies-what-you-wish-you-knew-about-spring-transactional-annotation/

https://www.catalysts.cc/wissenswertes/spring-transactional-rollback-on-checked-exceptions/

+0

안녕하세요 Merkurev, 링크 주셔서 감사합니다. 정말 도움을 주셔서 감사합니다. – sarkardebanjan