Scala читает конфиги динамически во время выполнения - PullRequest
0 голосов
/ 27 октября 2018

У меня есть файл конфигурации в папке ниже вычитать

main
    scala
    resources
             application.conf

и содержит

path{
  http{
      url = "http://testingurl"

  }
}

Я читаю, используя приведенный ниже код

import com.typesafe.config.Config;

val url = conf.getString("path.http.url")

Я читаю эту статическую информацию, которая предоставляется во время сборки.

Теперь я хочу прочитать их во время выполнения, пользователь должен иметь возможность изменять конфигурации даже после сборки jar.

мое требование - изменить событие url после сборки jar, я не хочу передавать его в качестве аргументов основной функции, потому что у меня так много таких значений, которые необходимо изменить после сборки jar

Ответы [ 3 ]

0 голосов
/ 29 октября 2018

Я предполагаю, что файл .jar создается с ключом, указанным как

val url = conf.getString ("path.http.url")

и вы будете запускать этот .jar каждый раз с измененным .config файлом

мое требование - изменить событие url после сборки jar,

возможное решение - предоставить массив значений конфигурации, где ключ остается тем же в файле .jar

import com.typesafe.config.ConfigFactory

ConfigFactory.load().getStringList("url.key").stream().map(eachUrl => functionToBeCalled)
0 голосов
/ 28 мая 2019

Вы можете использовать System.setProperty для переопределения конфигурации LightBend

import com.typesafe.config.ConfigFactory

println(ConfigFactory.load.getString("path.http.url")) 
// http://testingurl

ConfigFactory.invalidateCaches()
System.setProperty("path.http.url", "http://example.com")

println(ConfigFactory.load.getString("path.http.url")) 
// http://example.com

Ссылка: https://github.com/lightbend/config#standard-behavior

0 голосов
/ 27 октября 2018

См: Lightbend Config Readme

Использовать во время выполнения: -Dconfig.file=<relative or absolute path>

См:

For applications using application.{conf,json,properties}, 
system properties can be used to force a different config source 
    (e.g. from command line -Dconfig.file=path/to/config-file):

    config.resource specifies a resource name - not a basename, i.e. application.conf not application
    config.file specifies a filesystem path, again it should include the extension, not be a basename
    config.url specifies a URL

These system properties specify a replacement for application.{conf,json,properties}, not an addition. 
They only affect apps using the default ConfigFactory.load() configuration. 
In the replacement config file, you can use include "application" to include the original default config file; 
after the include statement you could go on to override certain settings.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...