#java #spring #jar #executable-jar
#java #spring #jar #исполняемый файл-jar
Вопрос:
Я пытаюсь запустить свой файл JAR с java -jar sample.jar
помощью команды и использую application.yml
файл конфигурации со следующей настройкой
spring:
profiles:
active:
- dev
---
server:
port: 8081
spring:
profiles: dev
---
server:
port: 8082
spring:
profiles: test
Но приложение не распознает профиль, возвращающий информацию о
No active profile set, falling back to default profiles: default
и настройка порта на значение по умолчанию 8080
Я пробовал такие вещи, как
java -jar sample.jar -Drun.jvmArguments=-Dspring.profiles.active=dev
или
java -jar sample.jar -Dspring.profiles.active=dev
В моем pom.xml
файле единственным внесенным изменением было добавление <packaging>jar</packaging>
свойства.
Из того, что я узнал, профили maven — это совершенно разные вещи и не должны влиять на профили spring.
Я не знаю, где искать проблему, поскольку, когда я запускаю приложение с помощью кнопки запуска в Intellij IDEA, оно работает отлично и распознает каждый настроенный профиль как активный.
Актуальный вопрос здесь заключается в том, как настроить профиль по умолчанию для запуска при создании артефакта, чтобы не было необходимости устанавливать дополнительные флаги в команде терминала, запускающей jar.
Я знаю, что есть много вопросов, подобных моим, но большинство их принятых ответов в моем случае не работают, а остальные остаются без ответа. Если вы знаете, в чем может быть проблема, пожалуйста, дайте мне знать. Заранее благодарим вас за любую помощь!
Ответ №1:
Вы можете активировать профиль с помощью аргумента командной строки. При попытке вы определяете активный профиль после имени jar. Вам необходимо указать аргумент программы перед именем jar, который вы запускаете.
java -jar -Dspring.profiles.active=dev sample.jar
Альтернативный способ установить активный профиль — создать application.properties
файл со следующим свойством:
spring.profiles.active=prod
Комментарии:
1. Итак, порядок здесь важен —
java -jar -Dspring.profiles.active=dev sample.jar
команде удалось установить профиль наdev
, но никаких изменений в конфигурации не было. Покаdev
профиль активен, я ожидаю, что приложение будет работать на порту 8081, но по-прежнему имеет значение по умолчанию 8080. Знаете ли вы, что вызывает такое поведение?2. Я просто перешел из
application.properties
вapplication.yml
и написал те же настройки, что и в application.properties.3. Ваш
application.yml
файл расположен в нужном месте? Регистрирует ли Spring, что он загрузил ваш файл при запуске?4. Он находится в том же месте,
application.properties
что и was . Он говорит сразу после команды20:43:46.096 [main] DEBUG org.springframework.core.env.PropertySourcesPropertyResolver - Found key 'spring.profiles.active' in PropertySource 'systemProperties' with value of type String 20:43:46.099 [main] DEBUG org.springframework.web.context.support.StandardServletEnvironment - Activating profiles [dev]
, но конфигурация по-прежнему не загружается — порт установлен по умолчанию5. Кажется, все правильно. Сложно отлаживать такого рода ошибки без доступа к полному исходному коду, чтобы проверить, не сконфигурировано ли что-то неправильно. Еще одна вещь, которую я бы попробовал, это открыть сгенерированный jar и проверить, есть ли
application.yml
там. Я знаю, что это не то, что вы ищете, но вы также можете изменить порт с помощью аргумента командной строки:java -jar -Dserver.port=8081 sample.jar