Ehcache 3.2 では、Expiry 拡張機能を実装しました。
public class EvictAtMidnightExpiry implements Expiry {
@Override
public Duration getExpiryForCreation(Object key, Object value) {
DateTime now = new DateTime();
DateTime resetAt = now.plusDays(1).withTimeAtStartOfDay();
long difference = resetAt.toDateTime().getMillis() - now.getMillis();
return Duration.of(difference, TimeUnit.MILLISECONDS);
}
@Override
public Duration getExpiryForAccess(Object key, ValueSupplier value) {
return null;
}
@Override
public Duration getExpiryForUpdate(Object key, ValueSupplier oldValue, Object newValue) {
return null;
}
}
現在、ロギングなども行っていますが、クリーンにするためにコードを最小限に抑えました。
次に、構成ビルダーで構成するだけです。
CacheConfigurationBuilder.newCacheConfigurationBuilder(String.class, String.class, ResourcePoolsBuilder.heap(1000)).withExpiry(new EvictAtMidnightExpiry()).build()
独自の「要素」を作成する必要がなく、有効期限または削除ポリシーを開始するために使用されることを確認する必要がないため、明らかに Ehcache は API の 2.5 から 3.2 にいくらか改善されました。ポリシーは現在、キャッシュにバインドされています。