> For the complete documentation index, see [llms.txt](https://jack80342.gitbook.io/spring-boot/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://jack80342.gitbook.io/spring-boot/iv.-spring-boot-features/24.-externalized-configuration/24.7.-type-safe-configuration-properties/24.7.2.-relaxed-binding.md).

# 24.7.2. Relaxed绑定

Spring Boot将`Environment`属性绑定到`@ConfigurationProperties` beans时会使用一些宽松的规则，所以`Environment`属性名和bean属性名不需要精确匹配。常见的示例中有用的包括虚线分割（比如，`context-path`绑定到`contextPath`），将environment属性转为大写字母（比如，`PORT`绑定`port`）。

例如，考虑以下`@ConfigurationProperties`类：

```java
@ConfigurationProperties(prefix="acme.my-project.person")
public class OwnerProperties {

    private String firstName;

    public String getFirstName() {
        return this.firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

}
```

在之前的例子里，下面的属性名都能使用：

表格 24.1. relaxed绑定

| 属性                                  | 说明                                  |
| ----------------------------------- | ----------------------------------- |
| `acme.my-project.person.firstName`  | 标准驼峰命名语法                            |
| `acme.my-project.person.first-name` | 短横线隔开表示，推荐用于`.properties`和`.yml`文件中 |
| `acme.my-project.person.first_name` | 下划线表示，用于`.properties`和`.yml`文件的可选格式 |
| `ACME_MYPROJECT_PERSON_FIRSTNAME`   | 大写形式，推荐用于系统环境变量                     |

**注** 注解的`前缀`值必须用短横线隔开表示，即小写并用`-`隔开，比如`acme.my-project.person`。

表格 24.2. 各个属性源的relaxed绑定规则

| 属性源          | Simple                     | List                                              |
| ------------ | -------------------------- | ------------------------------------------------- |
| Properties文件 | 驼峰命名法，短横线隔开表示，下划线表示        | 使用`[ ]`的标准list语法，或者由逗号分隔的值                        |
| YAML文件       | 驼峰命名法，短横线隔开表示，下划线表示        | 标准的YAML list语法，或者由逗号分隔的值                          |
| 环境变量         | 下划线作为分隔符的大写格式。`_`不应当用在属性名上 | 被下划线环绕的数值。比如：`MY_ACME_1_OTHER = my.acme[1].other` |
| 系统属性         | 驼峰命名法，短横线隔开表示，下划线表示        | 使用`[ ]`的标准list语法，或者由逗号分隔的值                        |

**提示** 我们推荐：当可能时，属性用小写短横线隔开的格式储存。比如，`my.property-name=acme`
