Я хочу запустить некоторый код при запуске, чтобы предварительно кэшировать некоторые вещи, а также хотел бы запустить таймер для повторного кэширования некоторых вещей за пределами критического пути веб-запроса. Возможно ли это в Play Framework, и где я так поместил этот код?Где я могу поставить код запуска в Play Framework?
ответ
Вам необходимо создать загрузочное задание, которое будет выполнено в Play при запуске приложения.
@OnApplicationStart
public class Bootstrap extends Job {
public void doJob() {
//do stuff
}
}
Подробнее о том, как это сделать в Play Manual.
В playframework 2.0 и выше, используйте GlobalSettings, как следующий код:
import play.*;
public class Global extends GlobalSettings {
@Override
public void onStart(Application app) {
Logger.info("Application has started");
}
@Override
public void onStop(Application app) {
Logger.info("Application shutdown...");
}
}
получения дополнительной информации перейдите к playframework docs: JavaGlobal
Не забывайте, что код, показанный в приведенных выше ответов имеет быть в базовом пакете вашего приложения (без спецификации пакета). (Я запускаю Play Framework 2.3.2).
Кроме того, код не будет запускаться в режиме dev до тех пор, пока не будет выполнен первый HTTP-запрос!
В моем случае мой код это:
import play.*;
public class Global extends GlobalSettings {
@Override
public void onStart(Application app) {
String message = "Application has started! LOLADA";
Logger.info(message);
System.out.println(message);
}
@Override
public void onStop(Application app) {
String message = "Application shutdown...!!! LOLADA";
Logger.info(message);
System.out.println(message);
}
}
Расположенный в структуре проекта, как это:
(Я использую IntelliJ IDEA).
Привет, я планирую использовать Play 2.4, кажется, что асинхронный Job был удален из него? Если это так, знаете ли вы что-то, что может сделать то же самое? – iCodeLikeImDrunk
https://www.playframework.com/documentation/2.4.x/GlobalSettings – Isn0gud
«application.global» может использоваться в файле application.conf для размещения глобального файла в любом месте – Anirudh
В Play 2.4. + Вы должны использовать инъекцию зависимостей с помощью (необязательного) цикла жизненного цикла. Play будет автоматически использовать любой класс под названием Module
, который находится в корневом пакете.
Например:
приложение/ApplicationStart.scala:
import scala.concurrent.Future
import javax.inject._
import play.api.inject.ApplicationLifecycle
// This creates an `ApplicationStart` object once at start-up and registers hook for shut-down.
@Singleton
class ApplicationStart @Inject() (lifecycle: ApplicationLifecycle) {
// Shut-down hook
lifecycle.addStopHook {() =>
Future.successful(())
}
//...
}
приложение/Module.scala:
import com.google.inject.AbstractModule
class Module extends AbstractModule {
override def configure() = {
bind(classOf[ApplicationStart]).asEagerSingleton()
}
}
Больше документации этой модели в Playframework docs.
Приведен пример in an application.
- 1. Где я могу поставить код для autoloader.php?
- 2. Где я могу поставить код начала сеанса?
- 3. Где я могу поставить substr?
- 4. Где я могу поставить console.next()?
- 5. Где я могу поставить response.success()?
- 6. Где я могу поставить PgSearch.multisearch_options?
- 7. Где я могу поставить валидацию
- 8. Где я могу поставить CoInitialize?
- 9. swffit, где поставить код?
- 10. Где поставить этот код?
- 11. Где я могу поставить этот JS-код, чтобы он работал?
- 12. Где я должен поставить код automapper?
- 13. Где я должен поставить код проверки?
- 14. Play Framework 1.0. Где я могу изучить шаблонный шаблон UI
- 15. Где я могу поставить свои снимки?
- 16. Метеор, где поставить код d3?
- 17. Я не могу определить, где поставить петлю
- 18. Где поставить общий код контроллера
- 19. Где я могу поставить класс триггера H2?
- 20. UIViewController: где я могу поставить пользовательскую инициализацию
- 21. Где я могу поставить статические строки?
- 22. Где я могу поставить оператор if?
- 23. Где я могу поставить предложение о сортировке?
- 24. Play Framework 2.0 - где jsAction?
- 25. extjs - где поставить код css?
- 26. Непрерывный код в Java Play! Framework
- 27. CommonJs: где поставить код инициализации?
- 28. Django - Где поставить код чтения CSV
- 29. Где я могу найти код выхода сценария запуска GCE?
- 30. Play Framework с отправкой (scala): где я должен установить отправку?
[Версия документа Scala для 2.3.x] (https://www.playframework.com/documentation/2.3.x/ScalaGlobal) – mjswensen
до 2.4, возможно, 2.5 use di с ApplicationLifecycle – Jasonw
Это устарело в 2.6.x: https://www.playframework.com/documentation/2.6.x/GlobalSettings – Spen