#java #spring #spring-boot #spring-cloud
Вопрос:
Я обновил приложение Spring cloud до последней версии Spring boot 2.5.0.
Но во время запуска я получаю это исключение:
11:05:05.038 [main] ERROR org.springframework.boot.SpringApplication - Application run failed
org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property 'spring.profiles.active' imported from location 'class path resource [application-dev.yml]' is invalid in a profile specific resource [origin: class path resource [application-dev.yml] from skyshop-mail-1.0.jar - 42:17]
at org.springframework.boot.context.config.InvalidConfigDataPropertyException.lambda$throwOrWarn$1(InvalidConfigDataPropertyException.java:125)
приложение.yml
spring:
application:
name: mail-service
profiles:
active: dev
приложение-файл dev.yml:
logging:
file:
name: ${java.io.tmpdir}/application.log
level:
com:
backend: DEBUG
org:
springframework: DEBUG
springframework.web: DEBUG
jwt:
expiration: 86400
secret: test112322
server:
port: 8020
servlet:
context-path: /mail
spring:
application:
name: mail-service
profiles:
active: local
data:
web:
pageable:
one-indexed-parameters: true # Fix pagination starting number to start from 1
rest:
basePath: /mail
jackson:
default-property-inclusion: non_null
jmx:
enabled: false
datasource:
url: jdbc:mariadb://localhost:3306/database
driverClassName: org.mariadb.jdbc.Driver
jpa:
hibernate:
ddl-auto: update
properties:
hibernate:
dialect: org.hibernate.dialect.MariaDBDialect
show-sql: true
username: root
password: qwerty
oauth2:
resource:
jwt:
key-pair:
alias: mytestkey
store-password: mystorepass
info:
build:
version: 1.0
eureka:
client:
serviceUrl:
defaultZone: ${EUREKA_URI:http://localhost:8761/eureka}
instance:
preferIpAddress: true
Знаете ли вы, как я могу решить эту проблему?
Комментарии:
1. Вам нужно будет переименовать файл в соответствии с типом активного профиля dev, локальный. С другой стороны, вы могли бы управлять приложением. yaml только для общей конфигурации и создайте 2 разных файла для конфигурации управления разработчиком и локального профиля
Ответ №1:
Spring Boot 2.4 улучшил способ, которым приложение.свойства и приложение.файлы yml обрабатываются.
Подробности смотрите здесь: https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-Config-Data-Migration-Guide
Короче говоря: если у вас есть, например, приложение-локальный файл.yml, и внутри вы определили
spring:
profiles:
active: local
затем просто удалите эту запись в файле yaml.
Ответ №2:
Нет необходимости упоминать свойство spring.profiles.active, если имя файла-application-dev.yml ( новая версия spring boot )
Ответ №3:
В своем приложении-dev.yml вы заявляете :
spring:
application:
name: mail-service
profiles:
active: local
2 решения :
- переименуйте application-dev.yml в application-local.yml и используйте локальный профиль
- измените spring.profiles.active на dev в приложении-dev.yml
Комментарии:
1. хм…. похоже, что в последнюю версию весенней загрузки добавлена проверка этого атрибута.
2. Я попробовал второй вариант, но у меня все та же проблема.
3. Я удалил
profiles: active: dev
из application-dev.yml, и теперь он работает4. Приятно знать, что ты не заперта
Ответ №4:
Начиная с версии 2.4 (Весенняя загрузка 2.4):
Профили больше не могут быть активированы из документов, относящихся к профилю.
https://spring.io/blog/2020/08/14/config-file-processing-in-spring-boot-2-4
Одним из путей продвижения вперед может быть использование spring.profiles.group.*
- Из
application-dev.yml
удалить:profiles: active: local
- переименовать
application-dev.yml
->application-dev123.yml
- В
application.properties
группе определения «dev»:spring.profiles.group.dev=local,dev123
Группа с именем «dev» теперь заменяет предыдущий профиль с именем «dev».
Ответ №5:
Более новая версия Spring Boot очень строго соответствует соглашению об именах, основанному на средах. Вы не можете вводить свойства приложения во время выполнения. Вам нужно будет создать application-{env}.свойства для каждой среды, которые будут выбраны на основе активного профиля.
Но если вам неудобно выполнять все эти изменения, вы все равно можете использовать более старый процессор. Просто добавьте ниже в качестве дополнений JVM при запуске Spring Boot. Не забудьте также добавить его в точку входа Dockerfile, если вы используете Docker.
-Dspring.config.use-legacy-processing=true