I want to implement a mode specific configuration load in Play Framework 2.3.8 using Java. I know that this is achievable in 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)
}
}
Currently I managed to implement the same in java but I cannot cast the typesafe-s ConfigFactory.load(modeSpecificConfigFile)
return object from com.typesafe.config.Config
to 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);
}
Thank you!
将其包装为play.Configuration
:
Configuration modeSpecificConfig = new play.Configuration(ConfigFactory.load(modeSpecificConfigFile));
This solution doesn't work in Play 2.4.6 , because as it says in docs :
onLoadConfig Deprecated. This method does not do anything. Instead, specify configuration in your config file or make your own ApplicationLoader (see GuiceApplicationBuilder.loadConfig).
Thus I've implemented a simpler alternative solution , a custom Configuration loader, sharing sample code below.
First, assuming you already have all your parameters in "application.conf"
then create "application.prod.conf" for PROD environment
and (optionally) create "application.dev.conf" for DEV environment
Sample 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"
usable across your app : ConfigManager.java
public class ConfigManager {
public static play.Configuration modeSpecificConfig = new play.Configuration(
ConfigFactory.load(
"application." + Play.mode().toString().toLowerCase() + ".conf"
)
);
}
Now environment specific params are accessible across your app, you can get any param by using ConfigManager, for example:
ConfigManager.modeSpecificConfig.getString("keyname");
ConfigManager.modeSpecificConfig.getInt("keyname2");
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.