Play Framework: заблокировать поток начальной загрузки при запуске

Когда вы переопределяете onStart в Global, будет ли он блокировать поток, выполняющий процесс начальной загрузки? Другими словами, я хочу убедиться, что Play не запустится, пока вызов не вернется из onStart.

Если это не так, что является хорошим решением для выполнения критического процесса инициализации, который должен произойти до того, как Play начнет принимать запросы?


person user_1357    schedule 17.11.2014    source источник


Ответы (1)


Да, Global.onStart заблокируется до первого запроса.

Объект GlobalSettings в Play — это плагин. Когда приложение запускается, сначала загружаются маршруты, затем подключаемые модули загружаются последовательно, вызывая метод onStart каждого. Плагин GlobalSettings идет последним в этой инициализации, что гарантирует, что все остальные плагины будут загружены первыми, чтобы все ваши соединения с БД, кеш и т. д. были доступны там.

Инициализация подключаемого модуля должна блокировать один поток, чтобы гарантировать следующее:

  1. Все подключаемые модули инициализируются в точном порядке, необходимом для предотвращения ошибок порядка инициализации (если один подключаемый модуль зависит от другого, который инициализируется первым — например, подключаемый модуль базы данных всегда должен инициализироваться перед подключаемым модулем эволюции).

  2. Все подключаемые модули инициализируются до того, как приложение сможет начать обработку запросов. (В противном случае вы не сможете гарантировать, например, что плагин БД будет готов по первому запросу).

person Michael Zajac    schedule 17.11.2014