Значение по умолчанию как Длительность при @Value - PullRequest
0 голосов
/ 28 мая 2020

Мне нужно указать значение по умолчанию для переменной экземпляра, которая имеет тип java .time.Duration

Значение по умолчанию, которое я передаю, является читается как String, вызывая IllegalStateException

My class

public class Test {
  @Value("${kafka.consumer.commit.interval:5s}")
  private Duration commitInterval;

  .
  .
  .

}

Exception:

  Unsatisfied dependency expressed through field 'commitInterval'; 
  nested exception is org.springframework.beans.ConversionNotSupportedException: Failed to convert value of type 'java.lang.String' to required type 'java.time.Duration'; 
  nested exception is java.lang.IllegalStateException: Cannot convert value of type 'java.lang.String' to required type 'java.time.Duration': no matching editors or conversion strategy found

1 Ответ

2 голосов
/ 28 мая 2020

Вы можете использовать выражение SpEL напрямую для вызова фабричного метода Duration class:

@Value("${kafka.consumer.commit.interval:#{T(java.time.Duration).of(5, T(java.time.temporal.ChronoUnit).SECONDS)}}")
private Duration commitInterval;

, однако, как вы можете видеть, это немного многословно. или немного более простая версия, указанная в комментарии OP:

@Value("${kafka.consumer.commit.interval:#{T(java.time.Duration).ofSeconds(5)}}")
private Duration commitInterval;
...