Spring Boot 属性前缀必须是规范形式

1. 概览

在这篇文章中,我们将仔细研究Spring Boot的异常 “Reason: Canonical names should be kebab-case (‘-‘ separated), lowercase alpha-numeric characters, and must start with a letter“。

首先,我们要阐明Spring Boot中出现这种错误的主要原因。然后,我们将通过一个实际的例子,深入探讨如何重现和解决这个问题。

2. 问题说明

首先,让我们了解一下这个错误信息的意思。 “Canonical names should be kebab-case” 简单地告诉我们,Canonical names(Canonical names指的是唯一标识一个属性的属性名)应该是 kebab case,也就是 短横线分隔命名法

为了确保一致性,在 @ConfigurationProperties 注解的 prefix 参数中使用的命名惯例应该遵循 kebab case。

例如:

@ConfigurationProperties(prefix = "my-example")

在上面的代码片断中,prefix my-example 应该遵守 kebab case 的编码惯例。

3. Maven 依赖

由于这是一个基于Maven的项目,让我们在pom.xml中添加必要的依赖项:

<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter</artifactId> 
    <version>3.0.5</version>
</dependency>

为了重现这个问题,spring-boot-starter 是唯一需要的依赖。

4. 重现该错误

4.1. Application Configuration

让我们来注册所需的组件:

@Configuration
@ConfigurationProperties(prefix = "customProperties")
public class MainConfiguration {
    String name;
 
    // getters and setters
}

然后,我们需要在 application.properties 文件中添加一个自定义属性:

custom-properties.name="Baeldung"

application.properties 位于 src/main/resources 下:

|   pom.xml
+---src
|   +---main
|   |   +---java
|   |   |   \---com
|   |   |       \---baeldung
|   |   |           ...
|   |   |           ...
|   |   \---resources
|   |           application.properties

现在,让我们在项目根目录下执行 mvn spring-boot:run 命令,运行我们的Spring Boot示例应用程序,看看会发生什么:

$ mvn spring-boot:run
...
...
***************************
APPLICATION FAILED TO START
***************************

Description:

Configuration property name 'customProperties' is not valid:

    Invalid characters: 'P'
    Bean: mainConfiguration
    Reason: Canonical names should be kebab-case ('-' separated), lowercase alpha-numeric characters and must start with a letter

Action:

Modify 'customProperties' so that it conforms to the canonical names requirements.

如上所示,我们得到一条错误信息:Modify ‘customProperties’ so that it conforms to the canonical names requirements. ,这条错误信息表明,当前用于 customProperties 的命名规则不符合Spring设定的命名规则。换句话说,需要修改 customProperties 这个名字,以遵守Spring中对属性命名的要求。

5. 修复错误

我们需要将属性 prefix 从:

@ConfigurationProperties(prefix = "customProperties")

改成短横线分隔命名风格:

@ConfigurationProperties(prefix = "custom-properties")

6. Kebab Case 的优势

在访问这些属性时,使用 Kebab Case 的主要优势是,我们可以使用以下任何一种案例:

  • camelCaseLikeThis
  • PascalCaseLikeThis
  • snake_case_like_this
  • kebab-case-like-this

properties 文件中,使用 Kebab Case:

@ConfigurationProperties(prefix = "custom-properties")

将能够访问以下任何属性

customProperties.name="Baeldung"
CustomProperties.name="Baeldung"
custom_properties.name="Baeldung"
custom-properties.name="Baeldung"

7. 总结

在本教程中,我们了解到Spring Boot支持多种格式,包括属性名称中的驼峰、蛇形和短横线命名方式,但鼓励我们用短横线命名方式规范地访问它们,从而减少因命名规范不一致而导致错误或混淆的可能性。


Reference:https://www.baeldung.com/spring-boot-properties-canonical-form