diff --git a/spring-boot-project/spring-boot-docs/src/main/asciidoc/spring-boot-features.adoc b/spring-boot-project/spring-boot-docs/src/main/asciidoc/spring-boot-features.adoc index 18dc7b6ded9..2c957468b37 100644 --- a/spring-boot-project/spring-boot-docs/src/main/asciidoc/spring-boot-features.adoc +++ b/spring-boot-project/spring-boot-docs/src/main/asciidoc/spring-boot-features.adoc @@ -1263,6 +1263,7 @@ read timeout of 500ms can be specified in any of the following form: `500`, `PT0 You can also use any of the supported unit. These are: * `ns` for nanoseconds +* `us` for microseconds * `ms` for milliseconds * `s` for seconds * `m` for minutes diff --git a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/convert/DurationStyle.java b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/convert/DurationStyle.java index 0e81efbde01..36446071dc8 100644 --- a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/convert/DurationStyle.java +++ b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/convert/DurationStyle.java @@ -180,6 +180,11 @@ public enum DurationStyle { */ NANOS(ChronoUnit.NANOS, "ns", Duration::toNanos), + /** + * Microseconds. + */ + MICROS(ChronoUnit.MICROS, "us", (duration) -> duration.toMillis() * 1000L), + /** * Milliseconds. */ diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/convert/DurationStyleTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/convert/DurationStyleTests.java index 3d6aeb11630..eb3b2bfc3b9 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/convert/DurationStyleTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/convert/DurationStyleTests.java @@ -71,6 +71,18 @@ public class DurationStyleTests { .isEqualTo(Duration.ofNanos(-10)); } + @Test + public void detectAndParseWhenSimpleMicrosShouldReturnDuration() { + assertThat(DurationStyle.detectAndParse("10us")) + .isEqualTo(Duration.ofNanos(10000)); + assertThat(DurationStyle.detectAndParse("10US")) + .isEqualTo(Duration.ofNanos(10000)); + assertThat(DurationStyle.detectAndParse("+10us")) + .isEqualTo(Duration.ofNanos(10000)); + assertThat(DurationStyle.detectAndParse("-10us")) + .isEqualTo(Duration.ofNanos(-10000)); + } + @Test public void detectAndParseWhenSimpleMillisShouldReturnDuration() { assertThat(DurationStyle.detectAndParse("10ms")).isEqualTo(Duration.ofMillis(10)); diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/convert/StringToDurationConverterTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/convert/StringToDurationConverterTests.java index 8d314350573..c6bb5ddf8a1 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/convert/StringToDurationConverterTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/convert/StringToDurationConverterTests.java @@ -70,6 +70,14 @@ public class StringToDurationConverterTests { assertThat(convert("-10ns")).isEqualTo(Duration.ofNanos(-10)); } + @Test + public void convertWhenSimpleMicrosShouldReturnDuration() { + assertThat(convert("10us")).isEqualTo(Duration.ofNanos(10000)); + assertThat(convert("10US")).isEqualTo(Duration.ofNanos(10000)); + assertThat(convert("+10us")).isEqualTo(Duration.ofNanos(10000)); + assertThat(convert("-10us")).isEqualTo(Duration.ofNanos(-10000)); + } + @Test public void convertWhenSimpleMillisShouldReturnDuration() { assertThat(convert("10ms")).isEqualTo(Duration.ofMillis(10));