Запуск Spring Boot JAR с предопределенным профилем

#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