Spring boot 2 Converting Duration java 8 application.properties

Spring boot 2 Converting Duration java 8 application.properties

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 doesnt 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,

Its possible to use @Value notation with Spring Expression Language

@Value(#{T(java.time.Duration).parse(${spring.redis.timeout})})
private Duration timeout;

Spring boot 2 Converting Duration java 8 application.properties

The Duration in the moment (Spring-Boot 2.0.4.RELEASE) it is not possible to use together with @Value notation, but it is possible to use with @ConfigurationProperties

For Redis, you have RedisProperties and you can use the configuration:

spring.redis.timeout=5s

And:

@SpringBootApplication
public class DemoApplication {

  @Autowired
  RedisProperties redisProperties;

  public static void main(String[] args) {
    SpringApplication.run(DemoApplication.class, args);
  }

  @PostConstruct
  void init() {
    System.out.println(redisProperties.getTimeout());
  }
}

It printed (parse as 5s):

PT5S

https://docs.oracle.com/javase/8/docs/api//java/time/Duration.html#parse-java.lang.CharSequence-

Leave a Reply

Your email address will not be published. Required fields are marked *