2016-06-05 4 views
1

Мне нужно, чтобы мой кеш обновлялся каждый день в определенное время, в моем случае, в полночь. У меня есть способ сделать это с помощью Guava LoadingCache? До сих пор я только получил кэш будет обновлен после того, как один день, со следующим кодом:Обновить Guava LoadingCache каждый день в определенное время

private final LoadingCache<String, Long> cache = CacheBuilder.newBuilder() 
    .refreshAfterWrite(1, TimeUnit.DAYS) 
    .build(new CacheLoader<String, Long>() { 
     public Long load(String key) { 
      return getMyData("load", key); 
     } 
} 
+5

Используйте запланированное задание, звонит invalidateAll() в кеш каждый день в полночь. –

ответ

1

Вот код пропущено, который реализует JB Nizeth's ответ (Java 8):

long millisUntilMidnight = Duration 
      .between(LocalDateTime.now(), LocalDateTime.of(LocalDate.now().plusDays(1), LocalTime.MIDNIGHT)) 
      .toMillis(); 
Executors.newSingleThreadScheduledExecutor() 
      .scheduleAtFixedRate(() -> cache.invalidateAll(), millisUntilMidnight, 
      TimeUnit.DAYS.toMillis(1), TimeUnit.MILLISECONDS); 
Смежные вопросы