Как я могу указать внешний файл конфигурации для приложения java, которое не является весенней загрузкой - PullRequest
0 голосов
/ 08 марта 2020

Фон

Я создал консольное приложение java, используя kotlin и Gradle. Файл gradle создает толстый jar, который я могу запустить из командной строки, используя java -jar <project>.jar jar содержит файл application.properties, из которого читаются свойства.

Проблема

Я хотел бы укажите в командной строке, что файл application.properties должен быть прочитан по некоторому внешнему пути.
При использовании весенней загрузки я использовал

java -jar -Dspring.config.location=somepath/application.properties <project>.jar

, и это работает.
Но, похоже, он не работает в приложении без пружины

Вопрос

Можно ли указать внешнюю конфигурацию в командной строке для приложений без пружины?

Ответы [ 2 ]

1 голос
/ 08 марта 2020

Spring boot имеет целую главу в документации , которая касается различных способов конфигурации.

Очевидно, что если у вас нет весенней загрузки, вы должны реализовать что-то похожее на нее самостоятельно .

Первое, что вы должны решить - на каком уровне вам необходимо интегрировать конфигурацию в ваше приложение:

  • Вы хотите читать только ключ / значения из командной строки или, может быть, полагаться на переменные среды или системные свойства?

  • В общем, каков источник вашей конфигурации: Yaml? Файл свойств? может консул или эт c .d?

  • Хотите ли вы создать java объект, который будет отражать прочитанные вами конфигурации (как это делают классы, помеченные @ConfigurationProperties при весенней загрузке?

  • Хотите ли вы поддерживать только один источник конфигурации или хотите поддерживать различные источники конфигураций?

  • Если вы пользуетесь Spring, вам нужна конфигурация свойства, которые будут автоматически добавлены в bean-компоненты?

  • Если вы планируете использовать свойства / yaml (например, application.properties в весенней загрузке) - где вы хотите их разместить? загрузочное приложение не будет читать их «автоматически», вам нужно будет реализовать эту логику c.

  • Планируете ли вы работать с профилями (без весенней загрузки Приложение по-прежнему поддерживает различные варианты загрузки bean-компонентов в зависимости от указанного профиля.

Spring boot ответила на все эти и другие вопросы.

Вот некоторые варианты, которые могут вам понадобиться попробовать если вы работаете вне контекста загрузки пружины, но у вас по-прежнему есть приложение spring:

  1. Начиная с весны 3.1, я думаю, есть аннотация @PropertySource, которую вы можете использовать для создания Spring загрузить свойства из файла в classpath или некотором «месте» в файловой системе. Эта статья обобщает использование этого метода, а также сравнивает, какие пружинные ботинки имеют на рукавах, в отличие от обычного применения пружин. Этот также является хорошим учебником, в котором рассматриваются обычные функции пружин.

  2. Что-то не из весенней экосистемы, но все же может быть полезно: apache common конфигурация проект. Есть некоторые обходные пути для его интеграции с приложением пружины, см. здесь

0 голосов
/ 12 марта 2020

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

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