Grails 애플리케이션에서 서비스 메소드의 기본 동작은 트랜잭션 방식이며 트랜잭션이 체크되지 않은 예외가 발생하면 자동으로 롤백된다는 것입니다. 그러나 Groovy에서는 확인 된 예외를 처리 (또는 다시 throw)하지 않으므로 서비스 메소드가 확인 된 예외를 throw하면 트랜잭션이 롤백되지 않을 위험이 있습니다. 이것의 계정에, 다음과 같다 Grails 서비스 트랜잭션 동작
@Transactional(rollbackFor = Throwable.class)
class MyService {
void writeSomething() {
}
}
나는 단지 DB를 읽고 그 중 하나
MyService
의 다른 방법을 가지고 가정, 그리고 다른 하나는 DB에 접촉하지 않는 모든 Grails의 서비스 클래스를 주석을 바람직하다고 특수 효과가 맞습니까? 예외가 어떤 방법에서 발생합니다
- 경우와 진행중인 트랜잭션이, 그것은 것입니다 : 당신이 내 의도가 무엇인지 알아야합니다 추측이 질문에 대답하기 위해
@Transactional(readOnly = true) void readSomething() {} // Maybe this should be propagation = Propagation.NOT_SUPPORTED instead? @Transactional(propagation = Propagation.SUPPORTS) void dontReadOrWrite() {}
롤백 할 수 있습니다. 예를 들어,
writeSomething()
이dontReadOrWrite()
을 호출하고 후자의 예외가 발생하면 전자에서 시작한 트랜잭션은 롤백됩니다. 난 명시 적으로 무시하지 않는 한rollbackFor
클래스 수준 특성이 개별 메서드에 의해 상속된다고 가정합니다. - 진행중인 트랜잭션이 없다면
readSomething()
가 호출 될 때 어떤 트랜잭션이 읽기 전용 트랜잭션이 시작되고, 진행하지 않는 경우, 하나dontReadOrWrite
- 같은 방법을 위해 시작되지 않습니다. 읽기 - 쓰기 트랜잭션이 진행 중이면이 트랜잭션에 참여합니다.