以前在Play! v1在application.conf
中定义配置变量非常容易,然后像这样访问它们:
play.configuration("db.driver")
但是现在我在文档中找不到任何类似用途的文件或适当的替代方案。这样做的方法是什么?
答案 0 :(得分:115)
与此相当的Play 2.0 Scala将是:
Play.current.configuration.getString("db.driver")
您还需要import play.api.Play
完整的文档是here。
答案 1 :(得分:57)
适用于Play 2.0 - 在 Java控制器中,您可以使用以下命令:
String optionValue = Play.application().configuration().getString("db.driver");
要获取变量在视图中,请使用此选项:
@play.Play.application().configuration().getString("db.driver")
答案 2 :(得分:34)
自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 documentation以获取更详细的讨论。
答案 3 :(得分:21)
在 Play 2.3.2 for Java 中,您可以使用com.typesafe.config.ConfigFactory
选项:
Config conf = ConfigFactory.load();
String myFooBarConfiguration = conf.getString("foo.bar");
快速移动的API!
答案 4 :(得分:6)
在 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
并检查课程播放。配置。
答案 5 :(得分:5)
在Play Scala 2.3.x和2.4.x中,要从conf/application.conf
读取值,您可以执行以下操作:
import play.api.Play.current
...
current.configuration.getString("db.driver")
答案 6 :(得分:4)
在Play 2.0.1 Java中,您需要这样做:
import play.Application.*;
...
String optionValue = play.Play.application().configuration().getString("my.config");
答案 7 :(得分:3)
在Play 2.1中,Scala
首先,你必须import play.api.Play
Play.current.configuration.getString("varibale name")
答案 8 :(得分:2)
如果您使用的是 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
解决方案,如果无则抛出特定异常。
答案 9 :(得分:2)
Java with 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
答案 10 :(得分:1)
作为此处所有@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
...
答案 11 :(得分:0)
正如其他人所说,你需要导入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
有人建议更好的答案吗?
答案 12 :(得分:0)
//新方法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
答案 13 :(得分:0)
有多种方法可以使用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
.....
}