Spring boot 2 Converting Duration java 8 application.properties

CRISTIAN ROMERO MATESANZ picture CRISTIAN ROMERO MATESANZ · Aug 13, 2018 · Viewed 24.7k times · Source

I need to define Duration value (spring.redis.timeout) by application.properties.

I was trying to use one point defined in Spring boot documentation:

Spring Boot has dedicated support for expressing durations. If you expose a java.time.Duration property, the following formats in application properties are available:

A regular long representation (using milliseconds as the default unit unless a @DurationUnit has been specified) The standard ISO-8601 format used by java.util.Duration A more readable format where the value and the unit are coupled (e.g. 10s means 10 seconds)

When i use spring.redis.timeout=3s Spring boot application throws this exception:

Cannot convert value of type 'java.lang.String' to required type 'java.time.Duration': no matching editors or conversion strategy found

Which would it be the best way to set a correct value to a Duration property in application.properties withs last Spring boot 2 release?

Answer

Rituraj picture Rituraj · Jun 16, 2020

Any property which is of type duration can be injected via .properties or .yml files. All you need to do is use a proper formatting.

If you want to inject a duration of 5 seconds it should be defined as PT5S or pt5s or PT5s

  • case of the letters doesn't matter, so you use any combination which is readable for you
  • generally everyone uses all capital letters

Other examples

PT1.5S       = 1.5 Seconds
PT60S        = 60 Seconds
PT3M         = 3 Minutes
PT2H         = 2 Hours
P3DT5H40M30S = 3Days, 5Hours, 40 Minutes and 30 Seconds

You can also use +ve and -ve signs to denote positive vs negative period of time.

  • You can negate only one of the entity for example: PT-3H30M = -3 hours, +30 minutes, basically -2.5Hours
  • Or You can negate the whole entity: -PT3H30M = -3 hours, -30 minutes, basically -3.5Hours
  • Double negative works here too: -PT-3H+30M = +3 Hours, -30 Minutes, basically +2.5Hours



Upvote, if it works for you or you like the explanation. Thanks,