Как загрузить файлы ресурсов в Java в зависимости от среды? - PullRequest
0 голосов
/ 08 января 2019

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

В нескольких местах кода загружается файл конфигурации, как показано ниже:

 InputStream in = classLoader.getResourceAsStream("configfile.config");

Теперь, исходя из среды, я хочу иметь возможность загружать другой файл конфигурации. В dev я хочу иметь возможность загрузить configfile.dev.config, а в prod я хочу иметь возможность загрузить configfile.prod.config.

Что было бы наиболее неинвазивным, чистым решением этой проблемы?

Ответы [ 2 ]

0 голосов
/ 08 января 2019

Поскольку у вас, похоже, нет поддержки фреймворка для этого и вы запускаете его из командной строки, лучший способ - использовать системное свойство. Есть два общих подхода:

  • Используйте свойство, такое как config.location, где значением является URI для файла конфигурации. Это более гибко и позволяет вам предоставлять новый файл конфигурации во время выполнения, но делает его немного сложнее ссылаться на один файл внутри jar (эти URI становятся длинными и требуют экранирования оболочки).

  • Используйте свойство, например config.profile, где значением является идентификатор профиля, например dev или prod. Назовите включенные файлы конфигурации либо /dev/config.file, либо /config-dev.file, и соберите соответствующее имя шаблона из свойства.

Исходя из вашего предпочтения включить несколько конфигураций в банку, второй вариант, вероятно, лучше подойдет.

0 голосов
/ 08 января 2019

Это приложение с весенней загрузкой? Если да, вы можете использовать разные профили, такие как dev, testing и загрузить ресурс в соответствии с профилем.- https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-profiles.html

Если это не приложение весенней загрузки, вы можете передать значение профиля в качестве аргумента JVM и использовать его в коде для загрузки соответствующего ресурса.

  value=System.getProperty("profile");

Передать значение профиля при запуске приложения как -

  -Dprofile=test

Вы можете использовать переданный профиль и соответственно загрузить соответствующий файл.

  InputStream in = 
  classLoader.getResourceAsStream(value);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...