在 application.conf 中访问 Play! 2.0配置变量?

在 Play! v1中,在 application.conf中定义配置变量并像下面这样访问它们非常简单:

play.configuration("db.driver")

然而,现在我在文档中找不到在 v2中类似用法的任何内容,也找不到合适的替代方案。这样做的方法是什么?

52113 次浏览

相当于 Play 2.0 Scala 的应用程序是:

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

你还需要 import play.api.Play

完整的文档是 给你

适用于 Play2.0-在 Java 控制器中您可以使用以下命令:

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

要获得变量 就在眼前,请使用以下命令:

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

在 Play2.0.1 Java 中,您需要这样做:

import play.Application.*;
...
String optionValue = play.Play.application().configuration().getString("my.config");

在 Play 2.1中,Scala 首先你必须 < code > import Play.api. Play GetString (“变量名”)

为 Java 播放2.3.2中,你可以使用 com.typesafe.config.ConfigFactory选项:

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

快速移动 API!

在 Play Scala 2.3.x 和2.4.x 中,要读取 conf/application.conf的值,可以执行以下操作:

import play.api.Play.current
...
current.configuration.getString("db.driver")

正如其他人提到的,您需要导入 play.api. Play.current,然后如果运行:

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

在2.3.x/scala 10上

type mismatch;
found   : Option[String]
required: String

如果这是强制性的,那么这将会奏效:

url = current.configuration.getString("db.driver").get

有人能给个更好的答案吗?

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

要检查 Play 版本,请检查文件项目/插件。包含“ 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

并检查类发挥。配置。

如果您正在使用 播放 Scala,我发现这种方法在搜索了一些最佳实践之后是最合适的。为此,我注入了配置,然后像这样访问我的配置键:

import play.api.Configuration


class myClass @Inject()(
config: Configuration
) {
val configValue: String = config.underlying.getString("configKey")
}

这样,您就不会得到 Option,而是 String。如果不可用,则抛出一个异常:

Error injecting constructor, com.typesafe.config.ConfigException$Missing: No configuration setting found for key 'configKey'

主要目标是避免 @ 人们合并已经提到的纯 get解决方案,同时抛出一个特定的异常,如果没有。

从 Play 2.5开始,不推荐使用 play.api.Play.current。你应该使用依赖注入来注入 Environment或者 Configuration,并用它来读取配置值:

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

查看 播放文档以获得更详细的讨论。

作为对这里所有 @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
...

在 Java 中,play > 2.5.X 可以通过 ConfigFactory 助手读取配置值:

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

或者

ConfigFactory.load().getInt("redis.port")

对象 配置将把参数转换为正确的类型。它公开了处理任何 java 类型(getDouble、 getLong 等等)的方法

医生: Https://www.playframework.com/documentation/2.5.0/api/java/play/configuration.html

//新方法后2.5. x

    import javax.inject.Inject
import play.api.Configuration


class Example @Inject() (playconfiguration: Configuration) {
def index() = {
val confString: String = playconfiguration.getString("confKey").get
}

}

来源: Https://www.webkj.com/play-framework/play-scala-2.5-reading-config-using-di

使用 Scala 访问 Play 中的配置有多种方式

以下内容适用于 Play2.7. x

选择1: 使用 DI

import play.api.Configuration
.... other imports ...


class MyActor @Inject()(config: Configuration) extends Actor  {
println(config.get[String]("akka_actor_custom_dispatcher"))
println(config.get[String]("akka_actor_custom_dispatcher")) // w/o optional
println(config.getOptional[Int]("value_1").getOrElse(2))    // with optional
.....
}

选择2: 直接投资

import play.api.Configuration
.... other imports ...


class MyActor() extends Actor {
val config = new Configuration(ConfigFactory.load("application.conf")) // application.conf is optional
println(config.get[String]("akka_actor_custom_dispatcher"))
println(config.get[String]("akka_actor_custom_dispatcher")) // w/o optional
println(config.getOptional[Int]("value_1").getOrElse(2))    // with optional
.....
}