以前在玩!v1确实很容易在其中定义配置变量application.conf
,然后像这样访问它们:
play.configuration("db.driver")
但是,现在我无法在文档中找到与v2中类似用途或适当替代品有关的任何内容。这样做的方法是什么?
Answers:
从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"))
}
}
查看Play文档以获取更多详细讨论。
与此等效的Play 2.0 Scala为:
Play.current.configuration.getString("db.driver")
您还需要 import play.api.Play
完整的文档在这里。
play.api.Play.maybeApplication.map(_.configuration.getString("db.driver"))
在Java版Play 2.3.2中,您可以使用以下com.typesafe.config.ConfigFactory
选项:
Config conf = ConfigFactory.load();
String myFooBarConfiguration = conf.getString("foo.bar");
快速移动的API!
在Play 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
并检查class play.Configuration。
在Play 2.1中,Scala首先,您必须 import play.api.Play
Play.current.configuration.getString("varibale name")
在具有play> 2.5.X的Java中,您可以通过ConfigFactory帮助器读取配置值:
ConfigFactory.load().getString("redis.url")
要么
ConfigFactory.load().getInt("redis.port")
对象Config会将参数转换为正确的类型。它公开了处理任何Java类型(getDouble,getLong等)的方法。
Doc:https : //www.playframework.com/documentation/2.5.0/api/java/play/Configuration.html
如果您使用的是Play 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'
主要目标是避免@peoplemerge已经提到的纯get
解决方案,而如果None则抛出特定异常。
使用Scala在Play中有多种访问配置的方法
以下适用于Play 2.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:不带DI
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
.....
}
@Inject()
考试班?
GuiceApplicationBuilder
您将有机会覆盖默认绑定。除此之外,您现有的Play组件将按预期实例化。
// 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