2017-02-16 3 views
0

Ich integriere Zahlungsmodul in unserer Anwendung mit Spring-Boot. Ich stehe mit einem der Rand Fälle, in denen Benutzer den Browser während der Transaktion schließen. Ausführen von Trigger/Task nur einmal in Spring-Boot-und Task während der Laufzeit abzumelden

Als Benutzer den Browser schließen Ich brauche meine Transaktionstabelle zu aktualisieren, mit dem Status fehlgeschlagen. Aber leider kann ich nicht wie die URL der Händler-Website. Also dachte ich über das Schreiben eines Triggers (mit Spring Boot) nach, wenn ein Eintrag in die Transaktionstabelle (Hibernate) geht.

Der Auslöser sollte den Transaktionsstatus nach Timeout (30 min ca.) aktualisieren, wenn der Benutzer den Browser schließt, während die Zahlung tun.

Incase, wenn die Transaktion entweder Erfolg des Scheiterns ist dann will ich nicht den Trigger auszuführen.

Ich konnte nicht herausfinden, wie das in Spring-Boot zu tun, also habe ich Java-TimerTask verwendet, die nur einmal nach 30 min ausgeführt wird. Gibt es einen besseren Ansatz mit Federstiefel?

new java.util.Timer().schedule( 
      new java.util.TimerTask() { 
       @Override 
       public void run() { 
        LOGGER.info("Trigger for Transaction id "+transactionId); 
       } 
      }, 
      1000 * 60 * 30 // 30 mins 
    ); 

Antwort

0

Ich denke, Sie könnten dies aus dem falschen Winkel nähern. Sie überlegen, ob das Closing das Problem der Transaktion sein soll.

Warum nicht Transaktionen als Ganzes baumeln zu lassen? Haben Sie einen einzigen Job, der jede Minute läuft und zu lange Transaktionen abschließt? So können Sie sicherstellen, dass alle Transaktionen innerhalb einer bestimmten Zeit abgeschlossen sind.

+0

Also jeder min Job wird die DB treffen, um zu prüfen, ob der Transaktionsstatus null oder nein ist und Transaktionszeit> 30 Minuten –

+0

Das würde ich tun ... Indexieren Sie den Transaktionsstatus und die Zeit, so wird es ein sein mühelose Abfrage. –

Verwandte Themen