我有一个简单的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-resolvers
resolve
配置,这将选取环境变量。
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
系统属性替换。