文档章节

【一】Scala Configuration 相关API

Landas
 Landas
发布于 07/21 12:16
字数 506
阅读 9
收藏 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
博文 21
码字总数 46670
作品 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

没有更多内容

加载失败,请刷新页面

加载更多

下一页

qduoj~前端~二次开发~打包docker镜像并上传到阿里云容器镜像仓库

上一篇文章https://my.oschina.net/finchxu/blog/1930017记录了怎么在本地修改前端,现在我要把我的修改添加到部署到本地的前端的docker容器中,然后打包这个容器成为一个本地镜像,然后把这...

虚拟世界的懒猫
今天
1
0
UML中 的各种符号含义

Class Notation A class notation consists of three parts: Class Name The name of the class appears in the first partition. Class Attributes Attributes are shown in the second par......

hutaishi
今天
1
0
20180818 上课截图

小丑鱼00
今天
1
0
Springsecurity之SecurityContextHolderStrategy

注:下面分析的版本是spring-security-4.2.x,源码的github地址是: https://github.com/spring-projects/spring-security/tree/4.2.x 先上一张图: 图1 SecurityContextHolderStrategy的三个......

汉斯-冯-拉特
今天
1
0
LNMP架构(Nginx负载均衡、ssl原理、生成ssl密钥对、Nginx配置ssl)

Nginx负载均衡 网站的访问量越来越大,服务器的服务模式也得进行相应的升级,比如分离出数据库服务器、分离出图片作为单独服务,这些是简单的数据的负载均衡,将压力分散到不同的机器上。有时...

蛋黄_Yolks
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部