2016-01-28 2 views
5

In einer Scala-basierten Play-Anwendung versuche ich, einen Singleton-Dienst zu initiieren, ohne eine Anfrage an einen Controller zu stellen. Ich bin den Anweisungen in der 2.4 API documentation gefolgt, um eine Singleton-Klasse zu erstellen und dann Guices Dependency-Injection-Bibliothek zu verwenden, um die Klasse als eager singleton zu binden.Wie initialisiere ich einen eifrigen Singleton ohne eine Controller-Anfrage in Play?

Sogar mit eifriger Bindung wird der Singleton immer noch nicht aufgerufen, nachdem ich eine Anfrage über eine Controller-Route erhalten habe. Irgendwelche Ideen, was ich falsch mache?

Modul

package models 

import com.google.inject.AbstractModule 
import com.google.inject.name.Names 

class MessageLogModule extends AbstractModule { 
    def configure() = { 
    bind(classOf[MessageLogService]).asEagerSingleton 
    } 
} 

Konfiguration

play.modules.enabled += "models.MessageLogModule" 

Singleton

package models 

import javax.inject._ 

@Singleton 
class MessageLogService { 
    // Create a file to test 
    println("IN SINGLETON - CREATING NEW FILE") 
    val file = new java.io.File("howdy.txt") 
    file.createNewFile 
} 

Befehl ausführen

sbt compile run 

Die obige Singleton nicht genannt bekommt, bis ich eine Ausgabe von ...

curl http://localhost:9000/ 

Was ich will, ist für MessageLogService an dem Punkt starten Sie den Dienst läuft und nicht auf eine Anfrage warten, um einen Controller Route zu treffen.

+1

Haben Sie versucht "sbt compile start"? Run führt während der Entwicklung einige Tricks aus. –

+0

@ AlvaroCarrasco Super! Das war's! Kannst du das als offizielle Antwort posten, damit ich es als "Beantwortet" aussprechen kann und dir die Ehre gebe? –

+0

Für alle anderen, die sich hierüber befinden, gibt es einen Beitrag, in dem die Unterschiede zwischen 'run' und' start' diskutiert werden: http://stackoverflow.com/questions/18213427/what-are-the-differences-between-play- run-and-start –

Antwort

5

Was Sie wollen, ist: sbt compile start

run Verzögerungen Zusammenstellung und die Initialisierung bis erste Anforderung für eine schnellere Wechsel-Refresh-see-Änderung Entwicklungszyklus zu ermöglichen.

Verwandte Themen