2015-01-28 29 views
6

Bazı veritabanı girişlerini önbelleğe almak için spring ve @Cacheable ek notlarını kullanıyorum. Periyodik olarak tam önbelleği geçersiz kılmak istiyorum.Invalidate @Kullanılabilir arayüzde ek açıklama ile giriş yapılabilir mi?

Bu nedenle, bu ek açıklamaları bir arayüz yöntemine eklemek geçerli midir? Veya bu ek açıklamaların sınıf yöntemlerine yerleştirilmesi gerekir (boş bir yöntem gövdesine sahip olsa bile)? Ben arayüz yöntemine @Cacheable ve hizmette @CacheEvict varsa

public interface MyRepository extends CrudRepository<MyEntity, Long> { 
    @Override 
    @Cacheable("cache") 
    Airline findOne(long id); 

    @CacheEvict(value = "cache", allEntries = true) 
    @Scheduled(cron = "0 0 1 * * *") 
    void removeAll(); 
} 

uygulama başarıyla başlar. Yukarıdaki kodu kullanırsam işe yaramaz. Ama belki de yanlış şeyler yapıyorum?

cevap

7

Muhtemelen işe yarayacak, ancak bu ek açıklamaları uygulamaya koymayı öneririm.

Daha çok bir teorik soru, ancak şu şekilde düşünün: bir arabirim ortak bir sözleşmedir, ancak önbellekleme, bir uygulama detayıdır.

Arabiriminiz çeşitli yollarla gerçekleştirilebilir, örneğin bir gün bir HsqlDBRepository olabilir, bunun için önbelleğe alma zaten bellekte olduğu gibi mantıklı değildir.

Bir yan notta, 'her şeyi tahliye etmene' neden ihtiyaç duyduğunuzu dikkatlice düşünürdüm ... ne sıklıkta gerçekleştiğine bağlı olarak, önbelleklemenizi işe yaramaz hale getirebilir - ayrıca genellikle daha derin bir sorunun işareti olur tasarım ile. Bir süreden sonra öğeleri tahliye etmek istiyorsanız, timeToLive/timeToIdle yapılandırmayı düşünün - çoğu önbellek arka planı bunu güzel bir şekilde destekler.