2017-10-25 12 views
0

Spring + JPA 애플리케이션이 있습니다. 예외가 미래에 발생했을 때 나는 데이터베이스 변경을 롤백 할나중에 예외를 throw 할 때 트랜잭션을 롤백 할 수 있습니까?

@Transactional(rollbackFor = Exception.class) 
public MyEntity execute(MyEntity entity) { 
    //database operations 
    em.persist(entity); 

    Executors.newSingleThreadExecutor().submit(() -> { 
     //long calculations 
     if (errorOccurs) 
      throw new RuntimeException("Rollback transaction"); 
    }); 

    return entity; 
} 

: 내 서비스는 일부 데이터베이스 지속성 작업 및 비동기 긴 계산을 수행합니다. 내가 어떻게 해?

+0

나를 위해, 트랜잭션에서의 긴 계산은 분명히 나쁜 생각입니다. –

+0

내가 틀릴 수도 있지만 해결책을 찾기 위해 AOP를 보았습니까? – CKing

답변

1

이것은 DAO 클래스 (데이터 액세스 개체)처럼 보입니다. 일반적으로 DB 연결이나 트랜잭션을 가능한 한 짧게 유지하려고하므로 나쁜 생각입니다.

나는 당신의 계산이 길다는 것을 모른다. 그러나 당신이 엔티티를 영속화하기 전에 그것을 만들 것이다.

비동기 및 잠재적으로 병렬 계산이 매우 유용 할 수 있지만 이점보다는 많은 위험이 있습니다. 완료를 기다리면 꽤 오랫동안 DB 트랜잭션이 중단됩니다.

관련 문제