programing

Spring Boot에서 모든 캐시를 제거하려면 어떻게 해야 합니까?

css3 2023. 3. 31. 22:33

Spring Boot에서 모든 캐시를 제거하려면 어떻게 해야 합니까?

앱을 시작할 때 최대 20개의 캐시를 초기화했습니다.

@Bean
public CacheManager cacheManager() {
    SimpleCacheManager cacheManager = new SimpleCacheManager();
    cacheManager.setCaches(Arrays.asList(many many names));
    return cacheManager;
}

모든 캐시를 1시간 간격으로 리셋합니다.스케줄링된 작업 사용:

@Component
public class ClearCacheTask {

    private static final Logger logger = LoggerFactory.getLogger(ClearCacheTask.class);
    private static final DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd hh:mm:ss");

    @Value("${clear.all.cache.flag}")
    private String clearAllCache;

    private CacheManager cacheManager;

    @CacheEvict(allEntries = true, value="...............")
    @Scheduled(fixedRate = 3600000, initialDelay = 3600000) // reset cache every hr, with delay of 1hr
    public void reportCurrentTime() {
        if (Boolean.valueOf(clearAllCache)) {
            logger.info("Clearing all cache, time: " + formatter.print(DateTime.now()));
        }
    }
}

내가 문서를 잘못 읽고 있는 게 아니라면, 하지만@CacheEvict캐시의 이름을 입력해야 합니다.이러한 이름은 엉망이 될 수 있습니다.

사용방법@CacheEvict모든 캐시를 클리어 할 수 있습니까?

저는 그냥... 그냥 이런 거길...@CacheEvict모든 캐시를 루프하기만 하면 됩니다.

cacheManager.getCacheNames().parallelStream().forEach(name -> cacheManager.getCache(name).clear());

캐시 매니저를 사용하여 모든 캐시를 지우는 스케줄링된 작업을 수행했습니다.

@Component
public class ClearCacheTask {
    @Autowired
    private CacheManager cacheManager;

    @Scheduled(fixedRateString = "${clear.all.cache.fixed.rate}", initialDelayString = "${clear.all.cache.init.delay}") // reset cache every hr, with delay of 1hr after app start
    public void reportCurrentTime() {
        cacheManager.getCacheNames().parallelStream().forEach(name -> cacheManager.getCache(name).clear());
    }
}

작업을 완료합니다.

다음 evictCache 메서드는 @CacheEvict 주석을 사용하여 fooCache를 제거합니다.

public class FooService {

  @Autowired 
  private FooRespository repository;

  @Cacheable("fooCache")
  public List<Foo> findAll() {
    return repository.findAll();
  }

  @CacheEvict(value="fooCache",allEntries=true)
  public void evictCache() {
    LogUtil.log("Evicting all entries from fooCache.");
  }
}

언급URL : https://stackoverflow.com/questions/38358664/how-can-i-evict-all-cache-in-spring-boot