Application-propertiesでDuration value (spring.redis.timeout)を定義する必要があります。
Spring boot documentationで定義されている1つのポイントを使用しようとしました:
スプリングブートは期間を表現するための専用サポートを持っています。 Java.time.Duration
プロパティを公開する場合、アプリケーションプロパティで次の形式を使用できます。
通常の長い表現(@DurationUnit
が指定されていない限り、デフォルトの単位としてミリ秒を使用)Java.util.Duration
で使用される標準ISO-8601形式10秒を意味します)
Spring.redis.timeout = 3sを使用すると、Springブートアプリケーションが次の例外をスローします。
タイプ 'Java.lang.String'の値を必要なタイプ 'Java.time.Duration'に変換できません:一致するエディターまたは変換戦略が見つかりません
Spring Boot 2の最後のリリースでapplication.propertiesのDurationプロパティに正しい値を設定する最良の方法はどれですか?
Spring Expression Languageで@Value表記を使用することは可能です
@Value("#{T(Java.time.Duration).parse('${spring.redis.timeout}')}")
private Duration timeout;
現時点の期間(Spring-Boot 2.0.4.RELEASE)@Value表記と一緒に使用することはできませんが、@ ConfigurationPropertiesと共に使用することは可能です。
Redisには、RedisPropertiesがあり、構成を使用できます。
spring.redis.timeout=5s
そして:
@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());
}
}
印刷されました(5として解析):
PT5S
https://docs.Oracle.com/javase/8/docs/api//Java/time/Duration.html#parse-Java.lang.CharSequence-
Spring Bootは、@ ConfigurationProperties Beanにバインドするときに、外部アプリケーションプロパティを正しいタイプに強制しようとします。カスタムタイプの変換が必要な場合は、ConversionService Bean(conversionServiceという名前のBean)を提供できます。
新しいApplicationConversionService Beanを作成します(この名前はconversionServiceでなければなりません)。ここに、Spring boot 2.0.4でテストされた私のコードがあります:
@Configuration
public class Conversion {
@Bean
public ApplicationConversionService conversionService()
{
final ApplicationConversionService applicationConversionService = new ApplicationConversionService();
return applicationConversionService;
}
以下に、このアプローチを使用したサンプルプロジェクトを示します。
https://github.com/cristianprofile/spring-data-redis-lettuce
Spring-Bootバージョンまたはその依存関係がApplicationConversionServiceをコンテキストに入れない場合(およびSpring-Bootは2.1になるまで)、明示的に公開できます。
@Bean
public ConversionService conversionService() {
return ApplicationConversionService.getSharedInstance();
}
Duration.parse
を呼び出すため、プロパティファイルでPT3S
、PT1H30M
などを使用できます。