Scala - как установить данные в заполнитель из файла конфигурации? - PullRequest
3 голосов
/ 15 января 2020

У меня есть простой application.conf файл:

smth="smth ${data}"

data - это заполнитель, который я хотел бы заполнить некоторыми данными, предоставленными пользователем. Я прочитал файл config, но я действительно не представляю, как передать данные в этот String. Единственная идея состоит в том, чтобы использовать replace на String, но я думаю, что это не лучшее решение:

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

Можно ли написать это более чистым способом? Я пытался также сделать некоторые "волхвы c" с интерполяцией строк, но мне не удалось.

Ответы [ 3 ]

5 голосов
/ 15 января 2020

Если есть какой-то обходной путь% s?

smth="smth %s"


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


3 голосов
/ 15 января 2020

Самый простой способ - добавить переменную среды с именем data, а затем resolve конфигурацию со значением по умолчанию config-resolvers, которая будет выбирать переменные среды.

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")
2 голосов
/ 15 января 2020

Рассмотрим объединение в сочетании с программной настройкой системных свойств перед загрузкой конфигурации следующим образом:

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 системным свойством при загрузке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...