从属性文件读取属性

时间:2019-06-06 06:28:47

标签: scala

我有一个从conf.property文件中加载属性的代码。是否有更好的选择来加载所有属性并将其存储在例如地图?当前的方法强制为每个其他属性添加一行代码。

import java.io.File

object SomeObject {

  // path to the property file
  val path = "/src/main/resources/conf.properties"

  // load configuration from file
  val conf = ConfigFactory.parseFile(new File(path))


  // get properties
  val prDataPath = conf.getString("dataPath")
  val prContainsHeader = conf.getBoolean("containsHeader").toString
  val prMaxRows: Option[Int]  = Try(conf.getInt("maxRows")).toOption

  // more config variables here...

}

3 个答案:

答案 0 :(得分:5)

您可以使用PureConfig

您的application.conf

prop1 = "hello"
prop2 = "okidoki"

如果像您的示例中那样加载,则它应该可以工作(我尚未测试):

import pureconfig.generic.auto._

loadConfig[Map[String, String](conf) 

您还可以创建一个代表您的配置的case class

您的示例:

case class MyConfig(dataPath: String, containsHeader: Boolean, maxRows: Option[Int])

答案 1 :(得分:2)

您可以使用json。只需确保您的属性文件为json格式即可。

import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.module.scala.DefaultScalaModule
import com.fasterxml.jackson.module.scala.experimental.ScalaObjectMapper
import scala.io._

val json = Source.fromFile("/src/main/resources/conf.properties")
val mapper = new ObjectMapper() with ScalaObjectMapper
mapper.registerModule(DefaultScalaModule)
val parsedJson = mapper.readValue[Map[String, Object]](json.reader())

答案 2 :(得分:1)

您可以使用HotReload库将conf文件转换为案例类https://github.com/gekomad/hot-reload。 有两种模式:可变模式和不可变模式。第一个创建一个配置器,该配置器在修改原始conf文件(自动热重载)时修改参数。 第二个允许您创建一个配置器,该配置器在修改原始conf文件时不会更改。

case class FooConfig(bar: String, baz: Option[Int], list: List[Int], missingValue: Option[String])  

file /path/conf1.conf:  
{  
   bar = "hello",  
   baz = 1,  
   list = [1, 1, 111]  
}  

import com.github.gekomad.hotreload.core.HotReload 

val hr: Try[HotReload[FooConfig]] = HotReload[FooConfig]("/path/conf1.conf")

hr match {  
  case Success(fooConfig) => {        
     assert(fooConfig.currentConf == FooConfig("conf_1", Some(1), List(1, 11, 111), None))
     assert(fooConfig.currentConf.bar == conf1.bar)
     ..
     ..