2016-11-29 2 views
0

У меня есть успокаивающее веб-сервис, разработанный с использованием платформы 2.5. Я хочу настроить свой веб-сервис на себя, назвав себя. Это делается для того, чтобы мой сервис был полностью запущен.Play 2.5 загрунтовать веб-сервис

Подход, который я принимаю, использует eagerBinding. Но код внутри класса вводится с помощью нетерпеливый связывания запускается на выполнение непосредственно перед приложение начинает

Вот что мой eagerbinding код выглядит

@Singleton 
class PrimingMe @Inject()(ws: WSClient) { 

    isServicePrimed 

    def isServicePrimed: Boolean = { 

    println("PRIME ME!!!") 
    val response = ws.url("http://localhost:9000/index").get 
     .map { 
     response => 
      response.status match { 
      case 200 => true 
      case _ => false 
      } 
     } 

    try { 
     Await.result(response, 5.second) 
    } catch { 
     case _ => false 
    } 

    } 

} 


class ServiceInjectionModule extends AbstractModule { 

    def configure(): Unit = { 

    bind(classOf[PrimingMe]).asEagerSingleton 
    } 
} 

Внутри application.conf

play.modules.enabled += "util.ServiceInjectionModule" 

Я хочу запустите мое приложение с помощью фиктивного вызова службы, чтобы при запуске реального трафика все соединения db были сделаны. В настоящее время мой первый призыв к сервису занимает гораздо больше времени, чем обычно. Какие еще варианты я должен достичь.

ответ

2

Нет Цель не побеждена. Оживленная загрузка по-прежнему работает, как ожидалось.

Убедитесь, что util.ServiceInjectionModule является первым модулем для загрузки, объявив его сверху в файле application.conf.

я сделал небольшой эксперимент после того, видя ваш вопрос, чтобы доказать это

Это как мой модуль выглядит. Он объявлен в корневом каталоге и в качестве модуля в корневой директор т.е. приложения, Вы не должны явно добавить к application.conf

class Module extends AbstractModule { 
    override def configure() = { 
    //It is very important for this call to be on the top. 
    bind(classOf[Initialize]).asEagerSingleton() 
    } 
} 

Нетерпеливый одноплодной

import com.google.inject.Inject 
import com.google.inject.Singleton 
import play.api.Logger 
import play.api.libs.ws.WSClient 

import scala.concurrent.Await 
import scala.concurrent.duration.Duration 

@Singleton 
class Initialize @Inject() (wsClient: WSClient) { 

    hit() 

    def hit(): Unit = { 
    val f = wsClient.url("http://www.google.com").get() 
    val result = Await.result(f, Duration.Inf) 
    Logger.info(s"status: ${result.status}") 
    } 
} 

выход:

[info] application - status: 200 
[info] play.api.Play - Application started (Dev) 

Из вышесказанного вы можете видеть, что модуль загружен и вызывается hit().

+0

Зачем это должен быть первый модуль? – rethab

+0

@rethab На всякий случай порядок инициализации имеет значение ... – pamu

+0

thats right it works, мне пришлось запустить мое приложение с началом сборки sbt. однако проблема заключается в том, что я не могу позвонить «себе», как это перед началом службы. позвольте мне перефразировать вопрос. – konquestor

Смежные вопросы