Property 'spring.profiles.active' imported from location 'class path resource [application-dev.yml]' is invalid

Viewed 40927

I updated Spring cloud application to the latest Spring boot version 2.5.0.

But during startup I get this exception:

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 file:

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

Do you know how I can fix this issue?

5 Answers

No need to mention spring.profiles.active property if file name is application-dev.yml ( spring boot new version )

The newer Spring Boot Version is very strict with naming convention based on environments. You cannot inject application properties during runtime. You will need to create application-{env}.properties for each environments, which will be picked based on active profile.

But if you don’t feel comfortable doing all these changes, you can still use older processor. Just add below as JVM arugments while running Spring Boot. Make sure to add it in Dockerfile Entrypoint as well, if you are using Docker.

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

Check documentation here

In your application-dev.yml, you declare :

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

2 solutions :

  1. rename application-dev.yml to application-local.yml and use local profile
  2. change spring.profiles.active to dev in application-dev.yml

Since version 2.4 (Spring Boot 2.4):

Profiles can no longer be activated from profile specific documents.

https://spring.io/blog/2020/08/14/config-file-processing-in-spring-boot-2-4

One way forward could be to use spring.profiles.group.*

  1. From application-dev.yml remove: profiles: active: local

  2. rename application-dev.yml -> application-dev123.yml

  3. In application.properties define group "dev": spring.profiles.group.dev=local,dev123

Group named "dev" now is replacement for previous profile named "dev".

Related