Не удается загрузить профиль по умолчанию при запуске приложения с весенней загрузкой

#spring-boot

#весенняя загрузка

Вопрос:

У меня есть application.yml файл с профилями spring, определенными следующим образом:

 spring:
  profiles:
    include:
      - dev
      - prod
  application:
    name: my-app-name
  kafka:
    consumer:
      bootstrap-servers: localhost:9092
...
  

и application-prod.yml файл:

 ...
spring:
  kafka:
    consumer:
      bootstrap-servers: production-kafka-bootstrap:9092
...
  

Когда я запускаю приложение с mvn spring-boot:run помощью, оно завершается с ошибкой:

 ...
The following profiles are active: default,prod
...
ConsumerConfig    : ConsumerConfig values:

bootstrap.servers = [production-kafka-bootstrap:9092]
...
Couldn't resolve server production-kafka-bootstrap:9092 from bootstrap.servers as DNS resolution failed for production-kafka-bootstrap
...
org.springframework.context.ApplicationContextException: Failed to start bean 'org.springframework.kafka.config.internalKafkaListenerEndpointRegistry'; nested exception is org.apache.kafka.common.KafkaException: Failed to construct kafka consumer
...
  

Похоже, что Spring загружает значение из application-prod.yml файла вместо значения по умолчанию, application.yml . Чего мне не хватает?

Комментарии:

1. что произойдет, если вы удалите - prod из application.yml ?

2. Зачем? Мне это нужно для сохранения производственных значений.

3. Я имею в виду, что произойдет, если вы удалите - prod из spring: profiles: include: файла application.yml in, поскольку, насколько я понимаю, документы » spring.profiles.include свойство может использоваться для безусловного добавления активных профилей», поэтому при запуске приложения оно загружает значения из default ( application.yml ) и prod ( application-prod.yml ), поскольку - prod указано в spring.profiles.include

4. Для меня странно и все еще неясно, как разделить значения, относящиеся к профилю, в application-{profile}.yml файл. Если я удалю prod запись из application.yml , приложение начнет использовать значения по умолчанию из application.yml . Если я передаю mvn spring-boot:run -Dspring.profiles.active=prod его, он НЕ принимает prod значения. Что в этом плохого?

5. -Dspring.profiles.active=prod работает при запуске приложения из a .jar , например: java -Dspring.profiles.active=prod -jar app.jar . его нельзя использовать напрямую при запуске приложения из плагина maven. вы должны использовать -Dspring-boot.run.profiles=prod , например: mvn spring-boot:run -Dspring-boot.run.profiles=prod

Ответ №1:

Наконец, я понял, как этого добиться (с помощью @MarcoLucidi). Вам не нужно указывать профили в каких-либо application.yml файлах (неважно, dev, prod и т. Д.). Если вы хотите передать активный профиль, вам придется:

  • создайте свое приложение с mvn clean install -DskipTests ;
  • запустите его с java -jar ./target/spring-demo-0.0.1.jar --spring.profiles.active=prod помощью (имя вашего файла jar будет другим);
  • проверьте терминал на наличие выходных результатов, он должен содержать что-то вроде этого:
 Starting SpringDemoApplication v0.0.1...
The following profiles are active: prod
...