文档章节

【一】Scala Configuration 相关API

Landas
 Landas
发布于 07/21 12:16
字数 506
阅读 15
收藏 0

        Play使用了 Typesafe config library,但是也提供了一个有着更多Scala高级特性的的 Configuration 封装。不熟悉Typesafe配置的开发者可以移步 configuration文件的语法和特性文档

读取配置文件

        通常你可以通过依赖注入来获取 Configuration 对象,或者你可以简单的向 Component 传递一个 Configuration 实例。

class MyController @Inject() (config: Configuration, c: ControllerComponents) extends AbstractController(c) {
  def getFoo = Action {
    Ok(config.get[String]("foo"))
  }
}

         get方法返回一个配置文件中的 value,这正是最常用方法 ~~

// foo = bar
config.get[String]("foo")

// bar = 8
config.get[Int]("bar")

// baz = true
config.get[Boolean]("baz")

// listOfFoos = ["bar", "baz"]
config.get[Seq[String]]("listOfFoos")

        注意这里接受一个隐含的 implicit ConfigLoader,但是对于常见的 StringIntSeq[String]类型相关 loader 已经预定义好了。

Configuration 同样支持对一组有效value值的校验:

config.getAndValidate[String]("foo", Set("bar", "baz"))

ConfigLoader

        通过自定义ConfigLoader,你可以简单的将配置转换为自定义类型。Play自身内部也是这样做的,尤其是它可以在使用 configuration 时带来更多类型安全的校验。如下:

case class AppConfig(title: String, baseUri: URI)
object AppConfig {

  implicit val configLoader: ConfigLoader[AppConfig] = new ConfigLoader[AppConfig] {
    def load(rootConfig: Config, path: String): AppConfig = {
      val config = rootConfig.getConfig(path)
      AppConfig(
        title = config.getString("title"),
        baseUri = new URI(config.getString("baseUri"))
      )
    }
  }
}

        然后你可以这样使用config.get:

// app.config = {
//   title = "My App
//   baseUri = "https://example.com/"
// }
config.get[AppConfig]("app.config")

可选的configuration键

        Play的 Configuration 支持通过 getOptional[A] 方法获取可选的键。使用上和 get[A] 基本类似,但是在键不存在时它将返回 None。我们更推荐的做法是在配置文件中对键设置null值,然后通过 get[Option[A]] 来访问。我们提供的这种方式主要用是来读取那些历史遗留的配置文件。: )

© 著作权归作者所有

Landas
粉丝 3
博文 24
码字总数 49354
作品 0
深圳
程序员
playframework 2.x 自定义routes文件报错:Router not found: conf/sanguosha

我把默认的routes(conf/routes)文件删除了 然后,新建了一个conf/sanguosha 文件 然后,在application.conf里面配置了 application.router=conf/sanguosha 运行,却报错了: play.api.Con...

西夏一品堂
2014/05/01
580
0
spark streaming从指定offset处消费Kafka数据

一、情景:当Spark streaming程序意外退出时,数据仍然再往Kafka中推送,然而由于Kafka默认是从latest的offset读取,这会导致数据丢失。为了避免数据丢失,那么我们需要记录每次消费的offse...

刺猬一号
07/19
0
0
Slick 3.0.0 RC1 发布,Scala 数据库访问层

Slick 是 TypeSafe 推出的 Scala 数据库访问库。开发者可以使用 Scala 语言风格来编写数据查询,而不是用 SQL,示例代码: object Coffees extends Table(String, Int, Double) { def name =...

oschina
2015/02/24
2.1K
2
Apache Kafka 2.0.0 正式发布,分布式消息发布订阅系统

Apache Kafka 2.0.0 已正式发布,这是一个主要版本,新增了许多重要的新功能。此外还包括许多重要的 bug 修复和改进,其中还包括一些严重的错误修复。 Apache Kafka 2.0.0 下载地址 >>> http...

局长
07/31
0
0
spark Local环境搭建,第一个DEMO程序的编写

spark Local环境搭建,第一个DEMO程序的编写 机器:windows 10 64位。 开发语言: Java JDK: 1.8. 1.spark,hadoop环境标题变量配置 去 http://spark.apache.org/downloads.html 网站下载spark...

Zhao-Qian
2016/06/13
270
0

没有更多内容

加载失败,请刷新页面

加载更多

初级开发-编程题

` public static void main(String[] args) { System.out.println(changeStrToUpperCase("user_name_abc")); System.out.println(changeStrToLowerCase(changeStrToUpperCase("user_name_abc......

小池仔
今天
4
0
现场看路演了!

HiBlock
昨天
12
0
Rabbit MQ基本概念介绍

RabbitMQ介绍 • RabbitMQ是一个消息中间件,是一个很好用的消息队列框架。 • ConnectionFactory、Connection、Channel都是RabbitMQ对外提供的API中最基本的对象。Connection是RabbitMQ的s...

寰宇01
昨天
9
0
官方精简版Windows10:微软自己都看不过去了

微软宣布,该公司正在寻求解决方案,以减轻企业客户的Windows 10规模。该公司声称,企业客户下载整个Windows 10文件以更新设备既费钱又费时。 微软宣布,该公司正在寻求解决方案,以减轻企业...

linux-tao
昨天
14
0
TypeScript基础入门之JSX(二)

转发 TypeScript基础入门之JSX(二) 属性类型检查 键入检查属性的第一步是确定元素属性类型。 内在元素和基于价值的元素之间略有不同。 对于内部元素,它是JSX.IntrinsicElements上的属性类型...

durban
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部