第二十一章 项目配置

Play配置文件基于 Typesafe.config 配置库, Typesafe.Config 库,纯Java写成、零外部依赖、代码精简、功能灵活、API友好。支持 Java properties、JSON、JSON 超集格式 HOCON 以及环境变量。它也是 Akka 的配置管理库。

配置信息必须定义在 conf/application.conf ,它采用 HOCON 格式。

指定配置文件

运行程序时,默认从 application.conf 中加载配置,不过也可以指定配置文件。

  • config.resource 指定配置文件名以及后缀。
  • config.file 指定配置文件所在路径。

通过这两种方式指定配置文件会替换掉默认的配置文件。

还可以在配置文件中使用 include application 引用其他配置文件。

与Akka一起使用

Akka与Play使用同一个配置文件 application.conf

与run命令一起使用

当通过 run 命令加载配置文件时,要注意如下事项:

格外的devSettings

可以在 build.sbt 中配置格外信息,当我们部署到生产环境中时,不会使用这些配置信息。

PlayKeys.devSettings := Seq("play.server.http.port" -> "8080")

application.conf中的配置服务器信息

run 模式下,Play服务器首先运行,然后再编译源代码。这也就意味着HTTP服务器刚开始运行时无法读取 application.conf 中的配置信息。如果你需要覆写HTTP服务器的信息,就不能使用 application.conf 进行配置,比如服务器端口,这个时候可以直接在命令行中配置:

> run -Dhttp.port=1234

HOCON语法

HOCON 的语法格式与 JSON 类似。

与JSON保持一致的部分

  • 文件必须以UTF-8编码
  • 引号括起来的字符串与JSON字符串一样
  • 取值类型可以为:字符串,数值,对象,数组,布尔值,null
  • 不支持 NaN

注释

使用 # 或者 // 进行注释

省略根括号

JSON格式中根元素必须是个数组或对象。空文档是非法的格式。

而在 HOCON 中,如果文档不是以[或者{开始的话,解析的时候默认会给它加上{}。

如果一个 HOCON 文档省略了{但是末尾还是有}的话,文档还是合法的。

键值对

在JSON中配置采用键值对的形式 key:value ,而在 HOCON 中,可以使用 = 替换

如果 key 的后面是 { ,则 = 或者 都可以省略。所以 "foo" {} 等价于 "foo":{}

逗号

数组中的变量,以及对象中的字段,它们中间不一定需要,分开,也可以使用 \n 分隔。 数组中的最后一个元素或者字典中的最后一个字段后面可以跟一个逗号。这个逗号会被忽略掉。 所以:

  • [1,2,3] 等价于 [1\n2\n3]
  • [1,2,3] 等价于 [1,2,3,]

重复的键

JSON格式中并没有说明如何处理重复的键。

HOCON 中,如果出现重复的键,后面的键值会覆盖掉前面的键值,除非键值的类型为字典,如果为字典,则两个键值进行合并。

路径形式的key

如果可以以路径的形式出现,相当于针对每个路径元素创建对象。 例如:

foo.bar:42

等价于

foo {bar:42}

导入配置文件

使用 include "file" 的形式导入配置文件。