Support Duration in generated meta-data
Update the configuration properties annotation processor to deal with `Duration` based default values. For example a field that defaults to `Duration.ofSeconds(10)` will have a meta-data default value of `10s`. See gh-11080
This commit is contained in:
@@ -19,6 +19,7 @@ package org.springframework.boot.configurationprocessor;
|
||||
import java.io.File;
|
||||
import java.io.FileWriter;
|
||||
import java.io.IOException;
|
||||
import java.time.Duration;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
|
||||
@@ -532,8 +533,8 @@ public class ConfigurationMetadataAnnotationProcessorTests {
|
||||
@Test
|
||||
public void simpleEndpoint() throws IOException {
|
||||
ConfigurationMetadata metadata = compile(SimpleEndpoint.class);
|
||||
assertThat(metadata).has(
|
||||
Metadata.withGroup("management.endpoint.simple").fromSource(SimpleEndpoint.class));
|
||||
assertThat(metadata).has(Metadata.withGroup("management.endpoint.simple")
|
||||
.fromSource(SimpleEndpoint.class));
|
||||
assertThat(metadata).has(enabledFlag("simple", true));
|
||||
assertThat(metadata).has(cacheTtl("simple"));
|
||||
assertThat(metadata.getItems()).hasSize(3);
|
||||
@@ -564,9 +565,9 @@ public class ConfigurationMetadataAnnotationProcessorTests {
|
||||
ConfigurationMetadata metadata = compile(CustomPropertiesEndpoint.class);
|
||||
assertThat(metadata).has(Metadata.withGroup("management.endpoint.customprops")
|
||||
.fromSource(CustomPropertiesEndpoint.class));
|
||||
assertThat(metadata).has(Metadata
|
||||
.withProperty("management.endpoint.customprops.name")
|
||||
.ofType(String.class).withDefaultValue("test"));
|
||||
assertThat(metadata)
|
||||
.has(Metadata.withProperty("management.endpoint.customprops.name")
|
||||
.ofType(String.class).withDefaultValue("test"));
|
||||
assertThat(metadata).has(enabledFlag("customprops", true));
|
||||
assertThat(metadata).has(cacheTtl("customprops"));
|
||||
assertThat(metadata.getItems()).hasSize(4);
|
||||
@@ -632,8 +633,8 @@ public class ConfigurationMetadataAnnotationProcessorTests {
|
||||
private Metadata.MetadataItemCondition cacheTtl(String endpointId) {
|
||||
return Metadata
|
||||
.withProperty("management.endpoint." + endpointId + ".cache.time-to-live")
|
||||
.ofType(Long.class).withDefaultValue(0).withDescription(
|
||||
"Maximum time in milliseconds that a response can be cached.");
|
||||
.ofType(Duration.class).withDefaultValue(0)
|
||||
.withDescription("Maximum time that a response can be cached.");
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
@@ -88,6 +88,13 @@ public abstract class AbstractFieldValuesProcessorTests {
|
||||
.isEqualTo(new Object[] { "c" });
|
||||
assertThat(values.get("integerArray")).isEqualTo(new Object[] { 42, 24 });
|
||||
assertThat(values.get("unknownArray")).isNull();
|
||||
assertThat(values.get("durationNone")).isNull();
|
||||
assertThat(values.get("durationNanos")).isEqualTo("5ns");
|
||||
assertThat(values.get("durationMillis")).isEqualTo("10ms");
|
||||
assertThat(values.get("durationSeconds")).isEqualTo("20s");
|
||||
assertThat(values.get("durationMinutes")).isEqualTo("30m");
|
||||
assertThat(values.get("durationHours")).isEqualTo("40h");
|
||||
assertThat(values.get("durationDays")).isEqualTo("50d");
|
||||
}
|
||||
|
||||
@SupportedAnnotationTypes({
|
||||
|
||||
@@ -18,6 +18,7 @@ package org.springframework.boot.configurationsample.fieldvalues;
|
||||
|
||||
import java.nio.charset.Charset;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.time.Duration;
|
||||
|
||||
import org.springframework.boot.configurationsample.ConfigurationProperties;
|
||||
import org.springframework.util.MimeType;
|
||||
@@ -108,4 +109,18 @@ public class FieldValues {
|
||||
|
||||
private FieldValues[] unknownArray = new FieldValues[] { new FieldValues() };
|
||||
|
||||
private Duration durationNone;
|
||||
|
||||
private Duration durationNanos = Duration.ofNanos(5);
|
||||
|
||||
private Duration durationMillis = Duration.ofMillis(10);
|
||||
|
||||
private Duration durationSeconds = Duration.ofSeconds(20);
|
||||
|
||||
private Duration durationMinutes = Duration.ofMinutes(30);
|
||||
|
||||
private Duration durationHours = Duration.ofHours(40);
|
||||
|
||||
private Duration durationDays = Duration.ofDays(50);
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user