PlayFramework 2.4 Code ausführen, nachdem die Anwendung gestartet wurde

8

In Version 2.4 ersetzt das Überschreiben der Builder-Methode in ApplicationLoader oder das Implementieren von EagerBinding im Modul "Abstract" das vorhandene Play 2.3 GlobalSettings onStart.

Wie auch immer in 2.3 die Methode onStart, Ihre Anwendung wurde bereits mit allen geladenen Plugins / Abhängigkeiten gestartet. Können Sie das Gleiche in Play 2.4 tun, d. H. Nach dem Start der Anwendung einen Code ausführen.

In meiner Situation erfordert Slick, dass die Anwendung gestartet wurde, bevor sie auf die Datenbank zugreifen kann.

Danke

    
Roy Lin 16.07.2015, 14:46
quelle

2 Antworten

6

Es ist allgemein bekannt, dass wenn Sie eine Klasse eifrig an eine Module binden, sie versuchen wird, eine Instanz so schnell wie möglich zu initialisieren. In play framework 2.4 erhalten Sie den Code, bevor die Anwendung gestartet wird.

Aber nach den üblichen erwarteten Regeln von DI: Wenn Sie im Konstruktor der Klasse, die Sie ausführen möchten, als Parameter (auch als "Abhängigkeit zu" bezeichnet) zu app: Application hinzufügen, wird dieser nach dem Start der App ausgeführt. so:

%Vor%

Das ist logisch, denn jeder DI-Rahmen, der es wert ist, wird herausfinden, welche Klassen er in welcher Reihenfolge injizieren kann.

Fügen Sie dann in Ihrem Modul einfach die übliche Bindung hinzu (hier playframework style statt Guice):

%Vor%

Ich hoffe, das funktioniert. Es ist auch nützlich, Play.current nicht mehr zu verwenden und stattdessen die App zu injizieren, anstatt das neue DI-System von Play 2.4 zu verwenden.

Ich würde gern @easel im playframework gitterraum dafür danken, dass er mir dabei geholfen hat.

    
quelle
0

Roy, hat Ihr Problem nicht ganz verstanden.

Haben Sie ein Problem mit der Verwendung einer EagerBinding, wie Sie erwähnen?

Sie können weiterhin GlobalSettings onStart, vorStart usw. verwenden, wenn Sie möchten, es wird nur abgeraten, weil Sie den GlobalState verlassen möchten.

    
Nio 17.07.2015 11:03
quelle