스프링 애플리케이션에서 서비스 레이어 메소드는 @Transactional(propagation=Propagation.REQUIRED)
으로 표시되고 <tx:annotation-driven />
을 사용하고 있습니다. 일반적으로 메소드가 완료되면 자동으로 트랜잭션을 커밋하는 기본 동작은 매력처럼 작동합니다. 그러나 특별한 경우에, 메소드 끝나기 직전에 커밋해야합니다. 그렇습니다. 그 시점 이후의 부분이 예외를 던지더라도 말입니다.스프링 트랜잭션 주석 - 활성 트랜잭션 받기
현재 트랜잭션에 액세스 할 수있는 방법이 있습니까? 하는 것,이 것으로 보인다 타임 스탬프에서methodThatNeedsToBeCalledAfterCommit()
후 한 번 발생 | "트랜잭션이 커밋 초기화 AbstractPlatformTransactionManager.processCommit (752)"및
TransactionDefinition td = new DefaultTransactionDefinition(TransactionDefinition.PROPAGATION_MANDATORY); // make sure we're talking about the same transaction already provided by the annotation
TransactionStatus status = transactionManager.getTransaction(td);
// perform various JDBC operations
transactionManager.commit(status);
methodThatNeedsToBeCalledAfterCommit();
하지만 내 로그를보고, 나는 단지 참조 :이 시도 @Transactional
메소드에 대한 정상적인 동작입니다.
실제로 이러한 방법으로 커밋을 강제하는 방법이 있습니까?
글쎄, 나는 결국 반드시 다시 생각하지 않을 것이다. 그러나 디자인 관점에서 볼 때 이는 실제로 하나의 방법에 속합니다. – Dan
이 방법에 대한 주석을 사용하지 말고 수동 변환 방법을 사용하십시오. 거래를 완벽하게 제어 할 수 있습니다. –
글쎄, 위의 코드는 어쨌든 수동 일을 꽤 많이하고있다? 그래서 나는 그걸로 괜찮습니다. 하지만 이미 사용하고있는 것과 동일한 트랜잭션을 사용할 수 있기를 원합니다. 특히이 메소드는'@ Rollback'이 설정된 JUnit 테스트에서 호출되기 때문에 특히 그렇습니다. – Dan