programing

위치 'class path resource [application-dev.yml]에서 가져온 속성 'spring.profiles.active'가 잘못되었습니다.

newstyles 2023. 2. 23. 22:09

위치 'class path resource [application-dev.yml]에서 가져온 속성 'spring.profiles.active'가 잘못되었습니다.

스프링 클라우드 애플리케이션을 최신 스프링 부트 버전 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)

application.yml

spring:
    application:
        name: mail-service
    profiles:
        active: dev

application-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

이 문제를 어떻게 해결할 수 있는지 아세요?

Spring Boot 2.4에서는 application.properties 및 application.yml 파일의 처리 방법이 개선되었습니다.

상세한 것에 대하여는, https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-Config-Data-Migration-Guide 를 참조해 주세요.

요약하면: 예를 들어 application-local.yml이 있고, 그 안에 정의되어 있는 경우

spring:
profiles:
    active: local 

yaml 파일에서 이 엔트리를 삭제합니다.

파일명application-dev.yml(spring boot new version)인 경우 spring.profiles.active 속성은 언급할 필요가 없습니다.

새로운 Spring Boot Version은 환경에 따라 명명 규칙이 매우 엄격합니다.런타임 중에는 응용 프로그램 속성을 삽입할 수 없습니다.활성 프로파일을 기반으로 선택되는 각 환경에 대해 application-{env.properties를 생성해야 합니다.

다만, 이러한 변경을 모두 실시할 수 없는 경우는, 낡은 프로세서를 사용할 수도 있습니다.Spring Boot을 실행하는 동안 아래를 JVM 아그리게이션으로 추가합니다.Docker를 사용하는 경우 Dockerfile Entrypoint에도 추가해야 합니다.

-Dspring.config.use-legacy-processing=true

매뉴얼은 이쪽에서 확인하세요.

버전 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"라는 이름의 이전 프로파일을 대체합니다.

application-dev.yml에서 다음과 같이 선언합니다.

spring:
    application:
        name: mail-service
    profiles:
        active: local 

2가지 솔루션:

  1. application-dev.yml의 이름을 application-local.yml로 변경하고 로컬프로파일을 사용합니다.
  2. application-dev.yml에서 spring.dev.active를 dev로 변경합니다.

언급URL : https://stackoverflow.com/questions/67935961/property-spring-profiles-active-imported-from-location-class-path-resource-a