如何在应用程序配置文件application.conf中访问Play! 2.0配置变量?

84

在 Play! v1 中,定义配置变量在 application.conf 中非常容易,并且可以像这样访问它们:

play.configuration("db.driver")

然而,我现在在v2的文档中找不到类似用法的内容,也没有适当的替代方法。有什么方法可以实现这个目标吗?


1
对于新访问者,这个问题并不仅限于Play 2.0。其他关于其他Play版本的答案也已经在下面给出了。 - saurabheights
14个回答

115

在 Play 2.0 中,相当于这个的 Scala 实现是:

Play.current.configuration.getString("db.driver")

你还需要 import play.api.Play

有关此的完整文档在这里


非常感谢,我很欣赏这个链接。希望我们能在Scala官网上看到更多的文档,而不仅仅是API浏览器 :) - crockpotveggies
15
请注意,根据情况,您不能假设应用程序尚未启动或者在代码的这一部分之前您不需要该应用程序;您可以使用 play.api.Play.maybeApplication.map(_.configuration.getString("db.driver")) - Andy Petrella
6
在 Play 2.5 中,这已经被弃用了。请参考迁移指南 - Breavyn

57

适用于Play 2.0 - 在Java控制器中,您可以使用以下内容:

String optionValue = Play.application().configuration().getString("db.driver");

要在视图中获取变量,请使用以下代码:

@play.Play.application().configuration().getString("db.driver")

1
我该如何在JavaScript中使用它? - Premraj
1
@premraj 将 share it 作为一个不可见 div 的 HTML5 数据属性使用。 - user267817

39

从Play 2.5版本开始,play.api.Play.current已被弃用。您应该使用依赖注入来注入EnvironmentConfiguration,并使用它们来读取配置值:

class HomeController @Inject() (configuration: play.api.Configuration) extends Controller {
  def config = Action {
    Ok(configuration.underlying.getString("db.driver"))
  }
}

查看Play文档以了解更详细的讨论。


5
感谢您提供更新的答案。我会将其标记为Play! 2.x的未来用户的正确答案。 - crockpotveggies
1
谢谢,这应该很好用,直到Play再次更改。 - Karlth
那么如何在测试类中使其工作呢?例如,Spces2? - rapt

24

在Java的Play 2.3.2中,您可以使用com.typesafe.config.ConfigFactory选项:

Config conf = ConfigFactory.load();
String myFooBarConfiguration = conf.getString("foo.bar");

快速移动的API!


这是当前版本的Play的正确答案...无需使用DI。 - toidiu
此解决方案与 Play 版本无关,也适用于 Scala。如果 HOCON 版本发生更改,则可能依赖于该访问点。 - Patrick Sauts

6

Play 2.3[.8] / Java中测试了另一种访问application.conf的值的方法:

要检查Play版本,请检查文件project/plugins。包含“sbt-plugin”的行应该有一个版本规范,如“2.3.8”。

例如,如果application.conf包含以下内容:

myConfigStringValue=abc
myConfigBooleanValue=true

可以从Java文件/类中查询这些值,例如:

import play.Configuration;
...
String myString = Configuration.root().getString("myConfigStringValue");
Boolean myBoolean = Configuration.root().getBoolean("myConfigBooleanValue");

如果未找到该值,get...方法将返回null,还有一些get...方法需要一个默认值作为参数。

详见https://www.playframework.com/documentation/2.3.x/api/java/index.html,并检查play.Configuration类。


5
在Play Scala 2.3.x和2.4.x中,要从conf/application.conf读取一个值,您可以执行以下操作:
import play.api.Play.current
...
current.configuration.getString("db.driver")

5

使用Play> 2.5.X中的Java技术,您可以通过ConfigFactory助手读取配置值:

ConfigFactory.load().getString("redis.url")

或者
ConfigFactory.load().getInt("redis.port")
Config对象将把参数转换为正确的类型。它公开处理任何Java类型的方法(getDouble,getLong等)。详情请参阅文档

这在2023年2月使用Play 2.8.19的Scala中对我来说非常有效。 - jacksonbenete

4
在 Play 2.0.1 Java 中,您需要执行以下操作:
import play.Application.*;
...
String optionValue = play.Play.application().configuration().getString("my.config");

3
在Play 2.1中,Scala编程语言中,首先你需要导入play.api.Play包,并使用以下代码获取变量名:Play.current.configuration.getString("varibale name")

2
作为对所有这里的@Inject答案的小贡献/改进,您不需要调用config.underlying实现。您可以直接使用config.getString。
例如:
@Singleton
class RESTSessionChecker @Inject()(
    implicit override val conf: Configuration)
    extends Filter {

   val MAX_CONCURRENT_REQUESTS = conf.getString("MAX_CONCURRENT_REQUESTS").
         getOrElse("100").toInt
   ...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接