2015-09-14 6 views
9

私はPlay 2.4アプリケーションを持っています。アプリケーションの起動時に毎週タスクを開始しようとしています。現在の勧告は、熱心に注入されたクラス(Guice)のコンストラクタでそれを行うことです。しかし、私の仕事はサービスにアクセスする必要があります。エラーを発生させることなく、そのサービスを自分の仕事に注入するにはどうすればいいですか?Playアプリケーションの起動時にサービスを呼び出す

Error injecting constructor, java.lang.RuntimeException: There is no started application 

+2

Play 2.4を意味しますか? – Kris

+0

ソースコードがありますか? – Kris

答えて

4

ApplicationStartクラスでコンストラクタインジェクションを使用し、それを熱心にバインドするApplicationModuleを用意する必要があります。あなたのapplication.confで

あなたAppModuleクラスで
play.modules.enabled += "yourPath.AppModule" 

:あなたのApplicationStartクラスで

public class AppModule extends AbstractModule { 

    @Override 
    protected void configure() { 

     Logger.info("Binding application start"); 
     bind(ApplicationStart.class).asEagerSingleton(); 

     Logger.info("Binding application stop"); 
     bind(ApplicationStop.class).asEagerSingleton(); 

    } 
} 

:あなたがそれを必要とする場合には

@Singleton 
public class ApplicationStart { 

    @Inject 
    public ApplicationStart(Environment environment, YourInjectedService yourInjectedService) { 

     Logger.info("Application has started"); 
     if (environment.isTest()) { 
      // your code 
     } 
     else if(
      // your code 
     } 

     // you can use yourInjectedService here 

    } 
} 

。 ApplicationStop:

@Singleton 
public class ApplicationStop { 

    @Inject 
    public ApplicationStop(ApplicationLifecycle lifecycle) { 

     lifecycle.addStopHook(() -> { 
      Logger.info("Application shutdown..."); 
      return F.Promise.pure(null); 
     }); 

    } 
} 
+0

実際に私は自分のアプリケーションで使っていますが、私はただ特定の実装の詳細を削除しました。それは動作します、あなたはそれを試してみることができます。 – SerhatCan

関連する問題