как извлечь файл из папки Spring-boot jar BOOT-INF \ lib - PullRequest
0 голосов
/ 02 июля 2019

Как извлечь файл *.zip, упакованный с spring-boot jar, при запуске приложения весенней загрузки.Причина, по которой я хотел бы их извлечь, потому что эти зависимости *.zip содержат собственные файлы среды (.dll для window и .so для linux).

Я думаю, что могу использовать https://docs.spring.io/spring-boot/docs/1.4.x/reference/htmlsingle/#howto-extract-specific-libraries-when-an-executable-jar-runs

как установить это временное местоположение как java.libarary.path или я могу настроить этот путь.

Ответы [ 2 ]

0 голосов
/ 02 июля 2019

Будет невозможно узнать, куда распаковывается этот zip-архив во время выполнения, а это значит, что вы не можете установить java.library.path раньше времени.

Я бы предложил сохранить файлы .dll и .so внутри вашего проекта как есть, без их упаковки в zip-файл. Таким образом, у вас есть постоянный путь, на который вы можете ссылаться при настройке пути к библиотеке.

Я бы не стал размещать их непосредственно в каталоге resources, а вместо этого выделил бы отдельный каталог, в котором они могут быть размещены. Это просто личное предпочтение; Я полагаю, что если вы поместите туда свои нативные файлы, это сработает, и я считаю, что вам нужно будет установить java.library.path=resources в этом случае (не проверял).

Например, мы разворачиваем приложение весенней загрузки с нативными зависимостями, используя Docker, и мы просто монтируем файлы .so как том Docker, который доступен в контейнере на /native. Затем мы просто устанавливаем аргументы JVM для включения -Djava.library.path=/native.

Обратите внимание, что вам также может потребоваться установить LD_LIBRARY_PATH для Linux. Этот вопрос может помочь.

0 голосов
/ 02 июля 2019

Существует два типичных решения проблемы «Как получить файлы конфигурации для конкретной среды?».

Решение 1: Используйте один файл свойств, который содержит настройки для каждой среды. Используйте суффикс свойства среды. Вот пример:

    dev.port=123456
    ist.port=98745
    prod.prot=90458

В зависимости от среды, в которой работает приложение, оно выберет один из значения портов.

Решение 2: Spring-Boot позволяет настроить файл переопределений для свойств приложения. Один из способов сделать это - установить "Spring.config.location" значение до вызова springApplication.run метод. Вот пример (длинная строка переносится без прокрутки):

springApplicationBuilder.properties(
    "spring.config.location=classpath:/default.properties," +
    "/local/path/on/deploy/host/config/overrides.properties");
springApplication = springApplicationBuilder.build();

springApplication.run(argumentArray);

Редактировать: обновляется за комментарий.

Подумайте над тем, чтобы сделать следующее:

  1. Сохранять файл JNDI для каждого хоста локально на каждом хосте.
  2. Сохраните путь к файлу JNDI (на хосте) в свойстве конфигурации.
  3. Настройте путь к файлу JNDI на каждом компьютере (либо с помощью файла переопределений, либо с помощью переменной среды).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...