복붙노트

[SPRING] 거래가 커밋 될 때까지 메일 보내기 지연

SPRING

거래가 커밋 될 때까지 메일 보내기 지연

누구든지 좋은 자습서 또는 자신의 XAResource 구현 방법에 대한 조언이 있습니까? Spring의 MailSender가 트랜잭션이되도록해야 트랜잭션이 커밋 된 후에 만 ​​메일이 전송되고 기존의 트랜잭션 래퍼는없는 것 같습니다.

해결법

  1. ==============================

    1.만약 커밋을 기다릴 필요가 있다면, 주석에서 말한 것처럼 TransactionSynchronizationManager.registerSynchronization ()을 사용하여 커밋시 이메일 전송을 트리거 할 수 있습니다.

    만약 커밋을 기다릴 필요가 있다면, 주석에서 말한 것처럼 TransactionSynchronizationManager.registerSynchronization ()을 사용하여 커밋시 이메일 전송을 트리거 할 수 있습니다.

  2. ==============================

    2.TransactionSynchronizationManager.registerSynchronization (언급 된 것과 같은)을 현재 트랜잭션의 다양한 단계에서 호출되는 다양한 메소드가있는 TransactionSynchronizationAdapter와 함께 사용할 수 있습니다. 나는 질문에 가장 적합한 방법이 afterCommit이라고 생각한다.

    TransactionSynchronizationManager.registerSynchronization (언급 된 것과 같은)을 현재 트랜잭션의 다양한 단계에서 호출되는 다양한 메소드가있는 TransactionSynchronizationAdapter와 함께 사용할 수 있습니다. 나는 질문에 가장 적합한 방법이 afterCommit이라고 생각한다.

    TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter() {
        @Override
        public void afterCommit() {
            super.afterCommit();
            sendEmail();
        }
    });
    
  3. ==============================

    3.나는 그것이 SMTP를위한 진정한 XAResource를 구현하는 것이 가능한지 의심 스럽다. 리소스 관리자 (이 경우 SMTP 서버)에 대한 트랜잭션 지원이 있어야하며 어떤 것이 있다고는 생각하지 않습니다. 최선의 방법은 '마지막 리소스 커밋'패턴입니다. 하나의 비 XA 리소스가 XA 트랜잭션에 참여할 수 있습니다. Google 검색, 많은 정보가 있습니다. 대부분의 Java EE 서버는 이것을 지원합니다.

    나는 그것이 SMTP를위한 진정한 XAResource를 구현하는 것이 가능한지 의심 스럽다. 리소스 관리자 (이 경우 SMTP 서버)에 대한 트랜잭션 지원이 있어야하며 어떤 것이 있다고는 생각하지 않습니다. 최선의 방법은 '마지막 리소스 커밋'패턴입니다. 하나의 비 XA 리소스가 XA 트랜잭션에 참여할 수 있습니다. Google 검색, 많은 정보가 있습니다. 대부분의 Java EE 서버는 이것을 지원합니다.

  4. ==============================

    4.gpeche가 언급 한 옵션 옆에있는 또 다른 옵션은 트랜잭션 내에서 트랜잭션 JMS 메시지를 보내는 것입니다. 그런 다음 메시지 수신기 (예 : MDB 빈)가 이메일을 보냅니다.

    gpeche가 언급 한 옵션 옆에있는 또 다른 옵션은 트랜잭션 내에서 트랜잭션 JMS 메시지를 보내는 것입니다. 그런 다음 메시지 수신기 (예 : MDB 빈)가 이메일을 보냅니다.

    EJB의 또 다른 트릭은 트랜잭션 내에서 타이머를 스케줄하는 것이다. 타이머도 트랜잭션이며 트랜잭션이 커밋 될 때만 시작됩니다. timeout = 0 인 타이머를 사용하기 만하면 트랜잭션이 커밋 된 후 즉시 시작됩니다.

  5. from https://stackoverflow.com/questions/4087611/delaying-sending-of-mail-until-transaction-commits by cc-by-sa and MIT license