2015-08-24 4 views
5

schreiben Ich bin mit Play-2.3.8 (Aktivator) & MongoDB als dbwie Cron-Job im Spiel Rahmen 2.3

ich einige Produkte in Produkten Sammlung habe und jedes Produkt hat Ablaufdatum und einmal zu ihrem Ablauf
Ich muss Dokumente in der Produktsammlung entfernen.

Ich plane Cron-Job zu schreiben, um Dokumente in der Produktsammlung zu entfernen, die jeden Tag auf einmal in bestimmter Zeit ausgeführt werden.

Ich denke, ich kann Annotationen wie @on, @Every in Java verwenden (Ich schreibe Code im Java-Spiel, nicht Scala spielen). aber als ich gegoogelt ich habe einige Plugins oder Tools oder Lösungen

a) https://github.com/ssachtleben/play-plugins/tree/master/cron

b) Quarz-Job schedular als Abhängigkeit 2,3 (Aktivator)

c) Akka Asynchron-Jobs zu spielen (I don‘ t, wie dies zu verwenden, wie mit Spiel intigrate und auch ich bin neu in Akka)

ich in Verwirrung Zustand bin, Könnten Sie mir bitte vorschlagen in folgenden

  1. welchen kann ich für meine anforderung verwenden?

  2. Bin ich im richtigen Pfad, um meine Arbeit zu tun?

  3. Gibt es etwas, das meine Arbeit auf Datenbankebene erledigen wird? Vielen Dank im Voraus.

Antwort

1
 Akka.system().scheduler().scheduleOnce(
      Duration.create(0, TimeUnit.MILLISECONDS), 
      new Runnable() { 
       public void run() { 
        Logger.info("ON START --- " + System.currentTimeMillis()); 
       } 
      }, 
      Akka.system().dispatcher() 
); 

    Akka.system().scheduler().schedule(
      Duration.create(nextExecutionInSeconds(8, 0), TimeUnit.SECONDS), 
      Duration.create(24, TimeUnit.HOURS), 
      new Runnable() { 
       @Override 
       public void run() { 
        Logger.info("EVERY DAY AT 8:00 --- " + System.currentTimeMillis()); 
       } 
      }, 
      Akka.system().dispatcher() 
); 

     Akka.system().scheduler().schedule(
       Duration.create(0, TimeUnit.MILLISECONDS), //Initial delay 0 milliseconds 
       Duration.create(60, TimeUnit.SECONDS),  //Frequency 30 minutes 
       new Runnable() { 

        @Override 
        public void run() { 
         Logger.info("creating the runnable"); 
         Logger.info("EVERY 60 MInutes --- " + System.currentTimeMillis()); 
         executeAllMongoAggregations(); 
        } 
       }, 
       Akka.system().dispatcher() 
     ); 

    }  Akka.system().scheduler().scheduleOnce(
      Duration.create(0, TimeUnit.MILLISECONDS), 
      new Runnable() { 
       public void run() { 
        Logger.info("ON START --- " + System.currentTimeMillis()); 
       } 
      }, 
      Akka.system().dispatcher() 
); 

    Akka.system().scheduler().schedule(
      Duration.create(nextExecutionInSeconds(8, 0), TimeUnit.SECONDS), 
      Duration.create(24, TimeUnit.HOURS), 
      new Runnable() { 
       @Override 
       public void run() { 
        Logger.info("EVERY DAY AT 8:00 --- " + System.currentTimeMillis()); 
       } 
      }, 
      Akka.system().dispatcher() 
); 

     Akka.system().scheduler().schedule(
       Duration.create(0, TimeUnit.MILLISECONDS), //Initial delay 0 milliseconds 
       Duration.create(60, TimeUnit.SECONDS),  //Frequency 30 minutes 
       new Runnable() { 

        @Override 
        public void run() { 
         Logger.info("creating the runnable"); 
         Logger.info("EVERY 60 MInutes --- " + System.currentTimeMillis()); 
        } 
       }, 
       Akka.system().dispatcher() 
     ); 

    } 
+0

hinzufügen, dass in Ihrem Global.java onStart ... – poornerd

+0

danke Poorned .. – Narendra

+0

Können wir Quartz schedular benutzen? @ Poornerd – Narendra

7

Diese kann mit der Global Class durchgeführt werden, und über die Onstart-Methode. https://www.playframework.com/documentation/2.5.x/JavaGlobal

Eine abstrakte Ansicht der Codierung ist unten angegeben. Hoffen, dass diese Hilfe

public class Global extends GlobalSettings { 

private Cancellable scheduler; 

@Override 
public void onStart(Application application) { 
    int timeDelayFromAppStartToLogFirstLogInMs = 0; 
    int timeGapBetweenMemoryLogsInMinutes = 10; 
    scheduler = Akka.system().scheduler().schedule(Duration.create(timeDelayFromAppStartToLogFirstLogInMs, TimeUnit.MILLISECONDS), 
      Duration.create(timeGapBetweenMemoryLogsInMinutes, TimeUnit.MINUTES), 
      new Runnable() { 
       @Override 
       public void run() { 
        System.out.println("Cron Job"); 
        // Call a function (to print JVM stats) 
       } 
      }, 
      Akka.system().dispatcher()); 
    super.onStart(application); 
} 

@Override 
public void onStop(Application app) { 
    scheduler.cancel(); 
    super.onStop(app); 
} 

}