簡體   English   中英

Play Framework 2.3.8 Java-使用特定模式覆蓋默認配置負載

[英]Play Framework 2.3.8 Java - Overriding default configuration load with mode specific

我想使用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中實現了相同的操作,但是無法將ConfigFactory.load(modeSpecificConfigFile)的typesafe -s ConfigFactory.load(modeSpecificConfigFile)返回對象com.typesafe.config.Configplay.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)); 

此解決方案在Play 2.4.6中 不起作用 ,因為正如docs中所述
不推薦使用onLoadConfig。 此方法不執行任何操作。 而是在配置文件中指定配置,或制作自己的ApplicationLoader(請參見GuiceApplicationBuilder.loadConfig)。

因此,我實現了一個更簡單的替代解決方案 ,一個自定義配置加載器,在下面共享示例代碼。

首先,假設您已經在“ application.conf”中擁有所有參數
然后為PROD環境創建“ application.prod.conf”
並(可選)為DEV環境創建“ 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"  

可在您的應用程序中使用: 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");  

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM