Обнаружение воспроизведения 2.2.x до начала приложения с использованием Java

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

  • application.dev.conf
  • application.test.conf
  • application.prod.conf

Сотрудник поделился методом для этого, который требует установки переменной среды ОС.

Я хотел бы исключить необходимость установки переменной ОС. Мое предпочтение - использовать все, что использует Play при запуске, чтобы узнать, в каком режиме он находится.

Например, если вы выполните play run из командной строки, то часть вывода будет "[info] play - Application started (Dev)"

Я хочу использовать эту информацию в моей Global.java, где я переопределяю onLoadConfig следующим образом:

public Configuration onLoadConfig(Configuration baseConfiguration, File f, ClassLoader loader) {
    String playEnv=<some static method to get mode>;        
    Config additionalConfig = ConfigFactory.parseFile(new File(f,"conf/application."+playEnv+".conf"));
    Config baseConfig = baseConfiguration.getWrappedConfiguration().underlying();
    return new Configuration(baseConfig.withFallback(additionalConfig));
}

Все, что я нахожу, это то, как это сделать после, приложение было запущено, то есть с помощью isDev(), isTest(), isProd().

Есть ли статический метод, предоставляющий режим, в то время как я переопределяю onLoadConfig в Global.java?

Ответ 1

Я думаю, что play run является dev, play start является prod.

EDIT: Если вы хотите посмотреть, что такое текущий режим, он прошел через play.api.Play.current:

Play.current.mode match {
  case Play.Mode.Dev => "dev"
  case Play.Mode.Prod => "prod"
}

Ответ 2

Проблема, похоже, была устранена в последней версии Play (3.0.0). В Global добавлен еще один метод onLoadConfig, который имеет параметр mode: {Dev,Prod,Test}.

public Configuration onLoadConfig(Configuration config, File path, ClassLoader classloader, Mode mode) {
    return onLoadConfig(config, path, classloader); // default implementation
}