2017-07-06 5 views
0

Je viens de mettre à jour mon application de play framework 2.3.9 à 2.4.6. Tout fonctionne correctement, mais la méthode onstart (application) est exécutée deux fois. Comme j'ai créé un planificateur dans la méthode onstart, ils sont également exécutés deux fois.La méthode onstart de Global.java est exécutée deux fois après la mise à niveau de playframework à 2.4.6

Global.java

public class Global extends GlobalSettings { 

public void onStart(Application app) { 
    Logger.info("Application has started"); 
    JPA.withTransaction(() -> { 
     if (ConfigHelper.getGlobalValue("install").equalsIgnoreCase("xyz")) { 
      Logger.info("Starting pqr scheduler"); 
      ActorRef myActor = Akka.system().actorOf(
        Props.create(PQR.class)); 
      FiniteDuration delay = FiniteDuration.create(0, TimeUnit.SECONDS); 
      FiniteDuration frequency = FiniteDuration.create(10, TimeUnit.MINUTES); 
      Akka.system() 
        .scheduler() 
        .schedule(delay, frequency, myActor, "start", Akka.system().dispatcher(), myActor); 
     } 

      }); 
} 


public void onStop(Application app) { 
    Logger.info("Application shutdown..."); 
} 


} 

fichier plugin.sbt est comme ci-dessous

logLevel := Level.Warn 


resolvers += "Typesafe repository" at "https://repo.typesafe.com/typesafe/releases/" 

addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.4.6") 
addSbtPlugin("de.johoop" % "jacoco4sbt" % "2.1.6") 

addSbtPlugin("com.typesafe.sbt" % "sbt-play-ebean" % "2.0.0") 
addSbtPlugin("com.typesafe.sbt" % "sbt-play-enhancer" % "1.1.0") 


addSbtPlugin("com.typesafe.sbt" % "sbt-rjs" % "1.0.1") 

addSbtPlugin("net.ground5hark.sbt" % "sbt-css-compress" % "0.1.3") 

addSbtPlugin("net.ground5hark.sbt" % "sbt-closure" % "0.1.3") 

addSbtPlugin("com.typesafe.sbt" % "sbt-digest" % "1.1.0") 

addSbtPlugin("com.typesafe.sbt" % "sbt-gzip" % "1.0.0") 

build.sbt est comme ci-dessous:

name := "project name" 

version := "1.0-SNAPSHOT" 

lazy val root = (project in file(".")).enablePlugins(PlayJava) 

scalaVersion := "2.11.7" 

libraryDependencies ++= Seq(
    javaJdbc, javaJpa, cache, javaWs, 
    "org.hibernate" % "hibernate-entitymanager" % "4.3.9.Final", 
    "mysql" % "mysql-connector-java" % "5.1.35", 
    "com.amazonaws" % "aws-java-sdk-ses" % "1.9.38", 
    "com.amazonaws" % "aws-java-sdk-s3" % "1.9.38", 
    "org.freemarker" % "freemarker" % "2.3.22" 
) 

resolvers += "Sonatype" at "url" 

credentials += Credentials("Repository Manager", "***", "***", "****") 

Note: J'utilise JPA dans le projet. Toute aide serait très appréciée.

+0

Il pourrait être intéressant d'essayer de se débarrasser du Global tout à fait car il est dépréciée de toute façon. – rethab

+0

Oui, vous avez raison et c'est mon plan futur. Mais pour le moment j'ai besoin d'une solution à chaud pour ce problème, car il y a des planificateurs qui sont exécutés deux fois. – gkbstar

Répondre

0

J'ai eu le même problème en production, pas en mode dev. J'exécutais la production sur heroku sur plusieurs dynos et le Global.java (et mes jobs d'arrière-plan déclenchés depuis Global.java) étaient exécutés autant de fois que mon nombre de dynos.

Voici une réponse sur la façon d'exécuter une seule fois: Play 2 Heroku startup with multiple dynos