Как запустить код при запуске в Play! фреймворк 2.4

Я пытаюсь напечатать «Hello» на консоли при запуске приложения. Можете ли вы объяснить, как это сделать?

Что пробовал сам:

app/modules/HelloModule.scala:

package modules

import com.google.inject.AbstractModule

trait Hello {}

class MyHelloClass extends Hello {
  initialize() // running initialization in constructor
  def initialize() = {
    println("Hello")
  }
}

class HelloModule extends AbstractModule {
  def configure() = {
    bind(classOf[Hello])
      .to(classOf[MyHelloClass]).asEagerSingleton
  }
}

в conf/application.conf я добавил:

play.modules.enabled += "modules.HelloModule"

и "Hello" не печатается, когда я запускаю activator run


person dziablo    schedule 15.09.2015    source источник
comment
Отображается ли Hello при получении первого запроса? В режиме разработки играйте лениво запускайте приложение, пока не придет первый запрос. Кстати, вы можете просто написать bind(classOf[MyHelloClass]).asEagerSingleton.   -  person Julien Lafont    schedule 15.09.2015
comment
после activator run я запрашиваю localhost:9000/books (это шаблон активатора simple-rest-scala), а Hello не отображается   -  person dziablo    schedule 15.09.2015
comment
См. этот stackoverflow.com/questions/36453955/   -  person TriCore    schedule 28.08.2017


Ответы (1)


Вам нужно использовать глобальный объект и переопределить метод onStart:

Определение объекта Global в вашем проекте позволяет вам управлять глобальными настройками для вашего приложения. Этот объект должен быть определен в пакете по умолчанию (пустом) и должен расширять GlobalSettings.

import play.api._

object Global extends GlobalSettings {

  override def onStart(app: Application) {
    Logger.info("Application has started")
  }

  override def onStop(app: Application) {
    Logger.info("Application shutdown...")
  }

}

Вы также можете указать собственное имя класса реализации GlobalSettings, используя ключ конфигурации application.global.

Обновление:

Правильным способом было бы использовать внедрение зависимостей, точно так же, как это описано в вопросе. Глобальные настройки могут быть удалены позже

С кодом в вопросе проблем нет. Я проверил это на своей локальной установке. Код пишет "Hello" после первого запроса в режиме разработки "запуск активатора" и после запуска приложения в рабочем режиме "запуск активатора".

Кстати, попробуйте использовать более простую строку в журнале, например

"--------ПРИЛОЖЕНИЕ ДЗЯБЛО ЗАПУЩЕНО--------"

Возможно, вы просто пропустили "Hello" в логе (я не узнал его с самого начала)

введите здесь описание изображения

person Andriy Kuba    schedule 16.09.2015
comment
наверняка вам нужно использовать DI, GlobalSettings - это просто самый простой способ вывести Hello на консоль при запуске приложения - person Andriy Kuba; 16.09.2015
comment
@dziablo - посмотрите, пожалуйста, мое обновление. Я не вижу никаких проблем с вашим кодом. Я сделал проверку на своем собственном локальном проекте - person Andriy Kuba; 16.09.2015
comment
Я создал новый шаблон scala-play, добавил код, и он работает. Возможно, что-то не так с шаблоном simple-rest-scala. В любом случае, большое спасибо! - person dziablo; 16.09.2015
comment
Я не понимаю, как добавление устаревшего фрагмента кода помечает решение этой проблемы. Причина того, что вы не видели Hello, заключается в том, что запуск активатора запускает сервер, а не запускает ваше приложение. - person Everus; 02.04.2016
comment
@Haurus: именно это объясняется в разделе обновлений, не так ли? - person Andriy Kuba; 02.04.2016