[SPRING] Spring 트랜잭션 : Exception 또는 Throwable에 대한 롤백
SPRINGSpring 트랜잭션 : Exception 또는 Throwable에 대한 롤백
나는 대신에 사용하는 것이 이치에 맞는지 궁금하다.
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
Throwable를 사용하는 방법
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Throwable.class)
오류 잡기를 이해함에 따라 뭔가 잘못 됐을 때라도 올바르게 행동하는 데 도움이됩니다. 아니면 도움이 안 될까요?
해결법
-
==============================
1.오류가 발생하면 스프링은 기본적으로 트랜잭션을 롤백 할 것이므로 rollbackFor = Throwable.class를 명시 적으로 지정할 필요가 없습니다.
오류가 발생하면 스프링은 기본적으로 트랜잭션을 롤백 할 것이므로 rollbackFor = Throwable.class를 명시 적으로 지정할 필요가 없습니다.
12.5.3 선언적 트랜잭션 롤백을 참조하십시오.
또는 DefaultTransactionAttribute를 살펴보십시오.
public boolean rollbackOn(Throwable ex) { return (ex instanceof RuntimeException || ex instanceof Error); }
-
==============================
2.@Transactional을 사용하고 있으므로 Spring, Hibernate 또는 다른 JDBC 래퍼를 통해 데이터베이스 작업을하고 있다고 가정 할 수 있습니다. 이러한 JDBC 래퍼는 일반적으로 확인 된 예외를 throw하지 않으며 JDBC SQLException 유형을 래핑하는 런타임 예외를 발생시킵니다.
@Transactional을 사용하고 있으므로 Spring, Hibernate 또는 다른 JDBC 래퍼를 통해 데이터베이스 작업을하고 있다고 가정 할 수 있습니다. 이러한 JDBC 래퍼는 일반적으로 확인 된 예외를 throw하지 않으며 JDBC SQLException 유형을 래핑하는 런타임 예외를 발생시킵니다.
@Transactional은 검사되지 않은 예외가 발생하는 경우에만 기본적으로 롤백하도록 설정됩니다.
다음과 같은 유스 케이스를 고려해보십시오.
@Transactional public void persistAndWrite(Bean someBean) throws IOException{ getSession().save(someBean); // DB operation someFileService.writeToFile(someBean); File IO operation which throws IOException }
우리가 파일에 무엇인가 쓸 수 없기 때문에 반드시 DB 작업을 롤백하고 싶지는 않습니다.
비슷하게
@Transactional public void persistAndThrowOutOfMemory(Bean someBean) { getSession().save(someBean); // DB operation someService.hugeOperationThrowsOutOfMemoryError(); // consumes all memory, throws OutOfMemoryError }
일부 서비스가 너무 많은 메모리를 소비하기 때문에 저장된 엔티티를 반드시 롤백해야하는 것은 아닙니다.
@ 거래는 당신에게 옵션을 제공합니다. 적절한 곳에서 사용하십시오.
-
==============================
3.가능한지 아닌지는 모르겠지만 오류와 같은 Throwables를 처리하는 것은 나쁜 프로그래밍 스타일이며, 이러한 종류의 치명적인 오류를 처리하는 것은 개발자의 책임이 아닙니다. 당신이 처리 할 수없는 나쁜 일들은 언제나 발생할 수 있습니다. 필요한 경우 시스템의 일부 논리 오류와 같이 확인 된 예외를 처리해야합니다.
가능한지 아닌지는 모르겠지만 오류와 같은 Throwables를 처리하는 것은 나쁜 프로그래밍 스타일이며, 이러한 종류의 치명적인 오류를 처리하는 것은 개발자의 책임이 아닙니다. 당신이 처리 할 수없는 나쁜 일들은 언제나 발생할 수 있습니다. 필요한 경우 시스템의 일부 논리 오류와 같이 확인 된 예외를 처리해야합니다.
from https://stackoverflow.com/questions/21188239/spring-transaction-rollback-on-exception-or-throwable by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring 3 MVC 컨트롤러 메소드 만들기 Transactional (0) | 2019.02.19 |
---|---|
[SPRING] 네트워크 프록시 뒤의 Spring-Boot (0) | 2019.02.19 |
[SPRING] java.lang.NoSuchMethodError : javax / persistence / spi / PersistenceUnitInfo.getValidationMode () Ljavax / persistence / ValidationMode (0) | 2019.02.19 |
[SPRING] 봄, POST를 사용하여 외부 URL로 리디렉션 (0) | 2019.02.19 |
[SPRING] 정적 컨텐츠를 제공하는 Tomcat (0) | 2019.02.19 |