#scala #config #typesafe #pureconfig
#scala #конфигурация #typesafe #чистая настройка #pureconfig
Вопрос:
У меня есть несколько файлов в папке ресурсов, и у меня есть класс сопоставления для того же. Теперь все, что я хочу, это загрузить каждый файл в другой класс конфигурации с помощью pureconfig. Есть ли какой-либо способ загрузить его, указав только имя папки ресурсов.
- src
- main
- resources
- configs
- conf1.json
- conf2.json
Я хочу что-то вроде этого
ConfigSource.resources("configs")
и он должен вернуть
List<Conf>
Текущий подход выглядит примерно так
def main(args: Array[String]): Unit = {
implicit def hint[A]: ProductHint[A] =
ProductHint[A](ConfigFieldMapping(CamelCase, CamelCase))
val resourceFiles = getResourceFolderFiles("configs")
val configs = new ListBuffer[SampleConfig];
resourceFiles.foreach(file =>
configs.append(
ConfigSource
.file(file)
.load[SampleConfig]
.getOrElse(null)))
println(configs.size)
}
private def getResourceFolderFiles(folder: String): Array[File] = {
val loader = Thread.currentThread.getContextClassLoader
val url = loader.getResource(folder)
val path = url.getPath
new File(path).listFiles
}
Есть ли какой-нибудь самый простой способ?
Комментарии:
1. Что вы уже пробовали? Пожалуйста, поделитесь своей лучшей попыткой, даже если она не сработает
2. @IvanStanislavciuc обновлен в вопросе
Ответ №1:
implicit def hint[A]: ProductHint[A] =
ProductHint[A](ConfigFieldMapping(CamelCase, CamelCase))
val sampleConfigList =
Try(Thread.currentThread().getContextClassLoader.getResource("configs").getPath)
.flatMap(filePath => Try(new File(filePath).listFiles().toList))
.map(fileList =>
fileList.flatMap(file => ConfigSource.file(file).load[SampleConfig].toOption)
)
.getOrElse(List.empty[SampleConfig])
Комментарии:
1. Предоставляет ли Pureconfig метод для чтения непосредственно из папки?
2. Нет. Это не так.
3. Я не думаю, что потребуются какие-либо изменения (честно говоря, я не помню дни scala 2.11). Если ваш данный код работал, то это тоже должно сработать.