diff --git a/core/runtime/src/main/java/io/quarkus/runtime/configuration/DurationConverter.java b/core/runtime/src/main/java/io/quarkus/runtime/configuration/DurationConverter.java index c0269c6c471a8..c8fd191699cf5 100644 --- a/core/runtime/src/main/java/io/quarkus/runtime/configuration/DurationConverter.java +++ b/core/runtime/src/main/java/io/quarkus/runtime/configuration/DurationConverter.java @@ -20,7 +20,7 @@ public class DurationConverter implements Converter, Serializable { private static final String PERIOD = "P"; private static final String PERIOD_OF_TIME = "PT"; private static final Pattern DIGITS = Pattern.compile("^[-+]?\\d+$"); - private static final Pattern DIGITS_AND_UNIT = Pattern.compile("^[-+]?\\d+(?:\\.\\d+)?(?i)[hms]$"); + private static final Pattern DIGITS_AND_UNIT = Pattern.compile("^(?:[-+]?\\d+(?:\\.\\d+)?(?i)[hms])+$"); private static final Pattern DAYS = Pattern.compile("^[-+]?\\d+(?i)d$"); private static final Pattern MILLIS = Pattern.compile("^[-+]?\\d+(?i)ms$"); diff --git a/core/runtime/src/test/java/io/quarkus/runtime/configuration/DurationConverterTestCase.java b/core/runtime/src/test/java/io/quarkus/runtime/configuration/DurationConverterTestCase.java index a3fa126ff7af8..af048140322ae 100644 --- a/core/runtime/src/test/java/io/quarkus/runtime/configuration/DurationConverterTestCase.java +++ b/core/runtime/src/test/java/io/quarkus/runtime/configuration/DurationConverterTestCase.java @@ -68,4 +68,18 @@ public void testValueIsInSec() { Duration actualDuration = durationConverter.convert("2s"); assertEquals(expectedDuration, actualDuration); } + + @Test + public void testValuesWithMultipleUnits() { + Duration expectedDuration = Duration.ofSeconds(150); + Duration actualDuration = durationConverter.convert("2m30s"); + assertEquals(expectedDuration, actualDuration); + } + + @Test + public void testValuesWithMultipleUnitsSigned() { + Duration expectedDuration = Duration.ofSeconds(90); + Duration actualDuration = durationConverter.convert("+2m-30s"); + assertEquals(expectedDuration, actualDuration); + } }