12

我想根据运行环境将我的播放应用程序指向特定的应用程序配置文件。共有三个,它们对应于标准播放状态:

  • 应用程序.dev.conf
  • 应用程序.test.conf
  • 应用程序.prod.conf

一位同事分享了一种方法,该方法需要设置操作系统环境变量。

我想消除设置操作系统变量的需要。我的偏好是使用 Play 在启动时使用的任何东西来了解它处于什么模式。

例如,如果您play run从命令行执行,则部分输出为"[info] play - Application started (Dev)"

我想在我的 Global.java 中使用这些信息,我像这样覆盖 onLoadConfig:

public Configuration onLoadConfig(Configuration baseConfiguration, File f, ClassLoader loader) {
    String playEnv=<some static method to get mode>;        
    Config additionalConfig = ConfigFactory.parseFile(new File(f,"conf/application."+playEnv+".conf"));
    Config baseConfig = baseConfiguration.getWrappedConfiguration().underlying();
    return new Configuration(baseConfig.withFallback(additionalConfig));
}

我发现的一切都是在应用程序启动后如何执行此操作,即使用 isDev()、isTest()、isProd()。

当我在 Global.java 中覆盖 onLoadConfig 时,是否有提供模式的静态方法?

4

3 回答 3

3

我认为play run是开发,play start是产品。

编辑:如果您想查看当前模式是什么,它是通过 play.api.Play.current 传入的:

Play.current.mode match {
  case Play.Mode.Dev => "dev"
  case Play.Mode.Prod => "prod"
}
于 2013-10-24T18:06:23.793 回答
3

该问题似乎在最新的 Play (3.0.0) 中得到解决。有另一种onLoadConfig方法添加到Global女巫有一个mode: {Dev,Prod,Test}参数。

public Configuration onLoadConfig(Configuration config, File path, ClassLoader classloader, Mode mode) {
    return onLoadConfig(config, path, classloader); // default implementation
}
于 2014-07-30T06:35:26.460 回答
0

Play 允许使用命令行指定替代配置文件,因此无需设置操作系统变量。

你当然可以创建一些 bash 脚本/bat 文件来避免每次都写

于 2013-10-25T09:24:13.447 回答