![](/img/trans.png)
[英]Making a tree of comments with Play Framework 2.3.8 with ebean ORM and 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.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));
此解決方案在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.