Scala - 如何从配置文件将数据设置为占位符?



我有一个简单的application.conf文件:

smth="smth ${data}"

data是一个占位符,我想用用户提供的一些数据填充它。我阅读了config文件,但我真的不知道如何将给定的数据传递到这个String中。唯一的想法是在String上使用replace,但我认为这不是最佳解决方案:

def fill(arg: String) = {
val config = ConfigFactory.load("application.conf").getString("smth")
println(config.replace("${data}", arg))
}

是否可以以更干净的方式编写它?我也试图用字符串插值做一些"魔术",但我失败了。

如果 %s 有一些解决方法?

smth="smth %s"

def fill(arg: String) = {
val config = ConfigFactory.load("application.conf").getString("smth")
println(config.format(arg))
}

最简单的方法是添加一个名为data的环境变量,然后使用默认config-resolversresolve配置,这将选取环境变量。

val config = ConfigFactory.load("application.conf").resolve()

另一种方法是提供一个补充配置,可用于解析占位符,

import scala.collection.JavaConverters._
val resolveConfig = ConfigFactory.parseMap(Map("data" -> "abc").asJava).resolve()

val resolveConfig = ConfigFactory.parseString("""data: abc""").resolve()

然后使用它来解决您的配置,

val config = ConfigFactory.load("application.conf").resolve(resolveConfig)

现在,您可以从配置中读取字符串,

val smthString = config.getString("smth")

在加载配置之前,请考虑将串联与以编程方式设置系统属性相结合

smth="smth "${data}

然后

def fill(arg: String) = {
System.setProperty("data", arg) // make sure to set before loading config
val config = ConfigFactory.load("application.conf")
println(config.getString("smth") 
}

这样${data}加载时data系统属性替换。

最新更新