grails 트랜잭션이 끝난 후 일부 태스크를 실행해야합니다. 나는 AfterCommit for Hibernate를 찾고 있지 않다. 대신에 서비스 트랜잭션이 끝난 후에 호출 될 메소드가 필요하다.트랜잭션 종료 후 태스크 실행 - Grails
어떨까요? 나는 설명서를 읽었지만 아무것도 찾을 수 없었습니다. 단지 afterUpdate 나 afterCommit 같은 일반적인 이벤트였습니다.
감사합니다.
grails 트랜잭션이 끝난 후 일부 태스크를 실행해야합니다. 나는 AfterCommit for Hibernate를 찾고 있지 않다. 대신에 서비스 트랜잭션이 끝난 후에 호출 될 메소드가 필요하다.트랜잭션 종료 후 태스크 실행 - Grails
어떨까요? 나는 설명서를 읽었지만 아무것도 찾을 수 없었습니다. 단지 afterUpdate 나 afterCommit 같은 일반적인 이벤트였습니다.
감사합니다.
정말 당신이하려는 일에 달려 있습니다. 가장 좋은 방법은 서비스에서 @Transactional
메서드를 호출 한 다음 해당 메서드가 반환되면 트랜잭션 후에 발생해야하는 코드를 실행하는 것입니다. 그냥 간단하게 뭔가를 할 몇 가지 작업을 분사 할 경우
대안, 당신은 사용할 수 있습니다 : 이것은 새 스레드를 분사 단지 바로 가기입니다
new java.util.Timer().runAfter(1000) { //time in milliseconds
//code to run here
}
을 후에 폐쇄 본체를 실행 (위의 예제에서) 1 초 ... 클로저는 여전히 주사 된 grails 객체에 액세스 할 수 있지만 세션에 액세스 할 수는 없다고 생각합니다. 나는 그것을 재확인 할 것이다. 트랜잭션 내에서 일부 처리가 끝날 때까지 기다려야하는 알림을 보내기 위해 여러 곳에서이 코드를 사용했습니다.
당신은
sessionFactory.currentSession.addEventListener(...)
class MyListener extends BaseSessionEventListener {
@Override
void transactionCompletion(boolean successful) {
}
}
당신은 단지 트랜잭션이 매개 변수를 통해 성공적으로 확인해야 현재 세션에 이벤트 리스너를 추가 할 수 있습니다. 또한 단일 세션에 여러 트랜잭션이있는 경우 리스너가 각 세션에 대해 호출됩니다.