Свойство «spring.profiles.active», импортированное из местоположения «ресурс пути к классу [application-dev.yml]» недопустимо

#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 решения :

  1. переименуйте application-dev.yml в application-local.yml и используйте локальный профиль
  2. измените 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.*

  1. Из application-dev.yml удалить: profiles: active: local
  2. переименовать application-dev.yml -> application-dev123.yml
  3. В 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
 

Ознакомьтесь с документацией здесь