Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Play Framework 2.3.8 Java-使用特定模式覆盖默认配置负载_Java_Playframework - Fatal编程技术网

Play Framework 2.3.8 Java-使用特定模式覆盖默认配置负载

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

我想使用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, 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-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”
和(可选)为开发环境创建“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");