从位置“类路径资源 [application-dev.yml]”导入的属性“spring.profiles.active”无效

Posted

技术标签:

【中文标题】从位置“类路径资源 [application-dev.yml]”导入的属性“spring.profiles.active”无效【英文标题】:Property 'spring.profiles.active' imported from location 'class path resource [application-dev.yml]' is invalid 【发布时间】:2021-08-28 08:03:29 【问题描述】:

我将 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)

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

你知道我该如何解决这个问题吗?

【问题讨论】:

您需要根据活动配置文件类型 dev、本地重命名文件。另一方面,您可以仅为公共配置管理 application.yaml,并为管理 dev 和本地配置文件配置创建 2 个不同的文件 【参考方案1】:

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 文件中删除此条目即可。

【讨论】:

【参考方案2】:

如果文件名为 application-dev.yml(spring boot 新版本),则无需提及 spring.profiles.active 属性

【讨论】:

【参考方案3】:

在您的 application-dev.yml 中,您声明:

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

2 个解决方案:

    将 application-dev.yml 重命名为 application-local.yml 并使用本地配置文件 在 application-dev.yml 中将 spring.profiles.active 更改为 dev

【讨论】:

hm.... 看起来像添加了此属性的最新 Spring boot 版本验证。 我尝试了第二个选项,但我仍然遇到同样的问题。 我从 application-dev.yml 中删除了profiles: active: dev,现在它可以工作了 很高兴知道您已解锁【参考方案4】:

从 2.4 版开始(Spring Boot 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.properties,这将根据活动配置文件进行选择。

但是,如果您对所有这些更改感到不自在,您仍然可以使用旧处理器。只需在运行 Spring Boot 时添加以下作为 JVM 参数即可。如果您使用的是 Docker,请务必将其添加到 Dockerfile 入口点中。

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

Check documentation here

【讨论】:

以上是关于从位置“类路径资源 [application-dev.yml]”导入的属性“spring.profiles.active”无效的主要内容,如果未能解决你的问题,请参考以下文章

如何从核心位置返回的位置检索地址

如何将文件从一个位置复制到另一个位置?

如何将文件从一个位置复制到另一个位置?

使用 MapView 快速从一个位置到另一个位置的路线

如何绘制从我的位置到目的地位置的路线?

Google从当前位置到已知位置的方向路线