Play Framework 2.3.8 Java-使用特定模式覆盖默认配置负载
我想使用Java在Play Framework 2.3.8中实现特定于模式的配置加载。我知道这在Scala是可以实现的:Play Framework 2.3.8 Java-使用特定模式覆盖默认配置负载,java,playframework,Java,Playframework,我想使用Java在Play Framework 2.3.8中实现特定于模式的配置加载。我知道这在Scala是可以实现的: import java.io.File import play.api._ import com.typesafe.config.ConfigFactory object Global extends GlobalSettings { override def onLoadConfig(config: Configuration, path: File, classlo
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中实现了同样的功能,但我无法将typesafe-sConfigFactory.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”
和(可选)为开发环境创建“application.dev.conf” 示例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"
public class ConfigManager {
public static play.Configuration modeSpecificConfig = new play.Configuration(
ConfigFactory.load(
"application." + Play.mode().toString().toLowerCase() + ".conf"
)
);
}
可在整个应用程序中使用:ConfigManager.java
# 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"
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");