Ответ 1
Вставьте его в play.Configuration
:
Configuration modeSpecificConfig = new play.Configuration(ConfigFactory.load(modeSpecificConfigFile));
Я хочу реализовать конфигурационную нагрузку в режиме 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);
}
Спасибо!
Вставьте его в play.Configuration
:
Configuration modeSpecificConfig = new play.Configuration(ConfigFactory.load(modeSpecificConfigFile));
Это решение не работает в Воспроизвести 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");