#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
...