Play Framework 2.3.8 Java - переопределение загрузки конфигурации по умолчанию с конкретным режимом

Я хочу реализовать конфигурационную нагрузку в режиме Play Framework 2.3.8 с использованием Java. Я знаю, что это возможно в Scala:

import java.io.File
import play.api._
import com.typesafe.config.ConfigFactory

object Global extends GlobalSettings {
  override def onLoadConfig(config: Configuration, path: File, classloader: ClassLoader, mode: Mode.Mode): Configuration = {
    val modeSpecificConfig = config ++ Configuration(ConfigFactory.load(s"application.${mode.toString.toLowerCase}.conf"))
    super.onLoadConfig(modeSpecificConfig, path, classloader, mode)
  }
}

В настоящее время мне удалось реализовать то же самое в java, но я не могу использовать возвращаемый объект typeafe-s ConfigFactory.load(modeSpecificConfigFile) от com.typesafe.config.Config до play.Configuration:

 @Override
    public Configuration onLoadConfig(Configuration configuration, File file, ClassLoader classLoader, Mode mode) {
        String modeSpecificConfigFile = "application." + mode.toString().toLowerCase() + ".conf";
        Logger.debug("Loading mode specific configuration from: " + modeSpecificConfigFile);
        Configuration modeSpecificConfig = ConfigFactory.load(modeSpecificConfigFile);
        return super.onLoadConfig(modeSpecificConfig , file, classLoader);
    }

Спасибо!

Ответ 1

Вставьте его в play.Configuration:

Configuration modeSpecificConfig = new play.Configuration(ConfigFactory.load(modeSpecificConfigFile)); 

Ответ 2

Это решение не работает в Воспроизвести 2.4.6, потому что, как сказано в документах:
onLoadConfig Устарела. Этот метод ничего не делает. Вместо этого укажите конфигурацию в файле конфигурации или создайте свой собственный ApplicationLoader (см. GuiceApplicationBuilder.loadConfig).

Таким образом, я реализовал более простое альтернативное решение - настраиваемый загрузчик конфигурации, который содержит пример кода ниже.

Во-первых, если вы уже имеете все свои параметры в "application.conf"
затем создайте "application.prod.conf" для среды PROD
и (необязательно) создать "application.dev.conf" для среды DEV

Пример application.prod.conf

# include the main config file, aka make all common params usable  
include "application.conf"  

# PROD specific params, you can also override params from the included conf  
param.for.prod.1 = "etc etc"  
here.override.for.prod = "blabla"  

можно использовать в вашем приложении: ConfigManager.java

public class ConfigManager {
    public static play.Configuration modeSpecificConfig = new play.Configuration(
        ConfigFactory.load(
            "application." + Play.mode().toString().toLowerCase() + ".conf"
            )
        );
}

Теперь параметры среды, специфичные для среды, доступны в вашем приложении, вы можете получить любой параметр с помощью ConfigManager, например:

ConfigManager.modeSpecificConfig.getString("keyname");  
ConfigManager.modeSpecificConfig.getInt("keyname2");