43

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?

Peter Penzov
  • 1,126
  • 134
  • 430
  • 808
  • You would need to rename file as per active profile type dev, local. On the other hand you could manage application.yaml only for common config and create 2 different file for manage dev and local profile config – Hasanuzzaman Rana Jun 11 '21 at 11:29

7 Answers7

42

Spring Boot 2.4 has improved the way that application.properties and application.yml files are processed.

See here for details: https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-Config-Data-Migration-Guide

Long story short: If you have for example an application-local.yml and inside you defined

spring:
profiles:
    active: local 

then just remove this entry in the yaml file.

René Winkler
  • 6,508
  • 7
  • 42
  • 69
21

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

Debashish
  • 211
  • 2
  • 2
11

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

9

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

IndustryUser1942
  • 1,052
  • 1
  • 8
  • 12
7

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
user3088799
  • 147
  • 7
0

Use this separator between 'spring' property parameters :

---
geno
  • 31
  • 6
-1

Editing your application.properties and defining this:

spring.config.use-legacy-processing=true

See here for details: https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-Config-Data-Migration-Guide