在使用Java启动应用程序之前检测Play 2.2.x模式

时间:2013-10-24 17:19:30

标签: java playframework playframework-2.2

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

  • application.dev.conf
  • application.test.conf
  • application.prod.conf

一位同事共享了一个执行此操作的方法,该方法需要设置OS环境变量。

我想消除设置OS变量的需要。 我的偏好是使用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时,是否存在提供模式的静态方法?

3 个答案:

答案 0 :(得分:3)

我认为play run是dev,play start是prod。

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

Play.current.mode match {
  case Play.Mode.Dev => "dev"
  case Play.Mode.Prod => "prod"
}

答案 1 :(得分: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 }

{{1}}

答案 2 :(得分:0)

Play允许specifying alternative configuration file使用命令行,因此无需设置操作系统变量。

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