# 24.7.3. 属性转换

将外部应用配置绑定到`@ConfigurationProperties` beans时，Spring Boot会尝试将属性强制转换为正确的类型。如果需要自定义类型转换器，你可以提供一个`ConversionService` bean（名为`conversionService`的bean），或自定义属性编辑器（通过`CustomEditorConfigurer` bean），或自定义`Converters`（bean定义时需要注解`@ConfigurationPropertiesBinding`）。

**注** 由于该bean在应用程序生命周期的早期就需要使用，所以确保限制你的`ConversionService`使用的依赖。通常，在创建时期任何你需要的依赖可能都没完全初始化。如果强制配置关键字不需要它，而且只依赖满足`@ConfigurationPropertiesBinding`的自定义的转换器，你可能想要重命名自定义的`ConversionService`。

**时间段转换**

Spring Boot对表达时间段有专门的支持。 如果你暴露了`java.time.Duration`属性，可用下列格式的应用属性：

* 常规的 `long`表示（默认单位为毫秒，除非指定了`@DefaultUnit`）
* [`java.util.Duration`使用的](https://docs.oracle.com/javase/8/docs/api//java/time/Duration.html#parse-java.lang.CharSequence-)标准的ISO-8601格式
* 组合了值与单位的更加易读的格式（比如`10s`表示10秒）

考虑下面的例子：

```java
@ConfigurationProperties("app.system")
public class AppSystemProperties {

    @DurationUnit(ChronoUnit.SECONDS)
    private Duration sessionTimeout = Duration.ofSeconds(30);

    private Duration readTimeout = Duration.ofMillis(1000);

    public Duration getSessionTimeout() {
        return this.sessionTimeout;
    }

    public void setSessionTimeout(Duration sessionTimeout) {
        this.sessionTimeout = sessionTimeout;
    }

    public Duration getReadTimeout() {
        return this.readTimeout;
    }

    public void setReadTimeout(Duration readTimeout) {
        this.readTimeout = readTimeout;
    }

}
```

为了将会话超时指定为30秒，`30`， `PT30S`和 `30s`都是等价的。将读取超时指定为500毫秒，可以用下列格式里的任何一种：`500`， `PT0.5S`与`500ms`。

你也可以使用任何支持的单位：

* ns用于纳秒
* ms用于毫秒
* s用于秒
* m用于分
* h用于小时
* d应用日

默认单位是毫秒，可以使用`@DefaultUnit`重写。

**注** 如果你正在升级之前的版本，之前的版本简单地使用`Long`来表达时间段，如果切换到`Duration`时不是毫秒，要确保定义了单位（使用`@DefaultUnit`）。这样做的话，在支持更加丰富的格式的同时，升级也能更加透明。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://jack80342.gitbook.io/spring-boot/iv.-spring-boot-features/24.-externalized-configuration/24.7.-type-safe-configuration-properties/24.7.3.-properties-conversion.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
