2016-06-05 5 views
1

Ich brauche, dass mein Cache jeden Tag zu einer bestimmten Zeit aktualisiert wird, in meinem Fall um Mitternacht. Ich habe eine Möglichkeit, dies mit Guava LoadingCache zu tun? Bisher habe ich nur der Cache nach einem Tag erneuert, mit dem nächsten Code:Refresh Guava LoadingCache jeden Tag zu einer bestimmten Zeit

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

Verwenden Sie einen geplanten Job, ruft invalidateAll() jeden Tag um Mitternacht in Ihrem Cache auf. –

Antwort

1

hier ein Code ist snipped die JB Nizeth's Antwort (Java 8) implementiert:

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); 
Verwandte Themen