可以通过属性使用咖啡因启用/禁用Springboot Cache?

问题描述 投票:0回答:1

my.property.cache.enabled=false

启用和禁用缓存。

这不是关于启用/禁用缓存的运行时。

例如,此代码:
@Configuration
@EnableCaching
class ReportCacheConfiguration {

  @Bean
  CacheManagerCustomizer<CaffeineCacheManager> cacheManagerCustomizer(MeterRegistry registry) {
    return cacheManager -> cacheManager.registerCustomCache("report", reportCache());
  }

  private Cache<Object, Object>  reportCache() {
    return Caffeine.newBuilder()
            .expireAfterWrite(1, TimeUnit.MINUTES)
            .build()
            ;
  }

}

@Service public class BookServiceImpl implements BookService { @Cacheable(cacheNames = "report") public Book findBook(String isbn) { //some very expensive network call //then some very expensive database call return new Book(...); } }

在上面的代码中,尤其是当第三方网络调用或数据库超载时,缓存非常有用。

,无论如何,在某些时刻,第三方服务或数据库正在加载下,在这种情况下,我们实际上要“击中目标并做昂贵的事情”。

为此,我们目前要评论代码,创建新的构建并重新部署...
@Service
public class BookServiceImpl implements BookService {

    //@Cacheable(cacheNames = "report")
    public Book findBook(String isbn) {
        //some very expensive network call
        //then some very expensive database call
        return new Book(...);
    }
}

//@Configuration
//@EnableCaching
//class ReportCacheConfiguration {
//
//  @Bean
//  CacheManagerCustomizer<CaffeineCacheManager> cacheManagerCustomizer(MeterRegistry registry) {
//    return cacheManager -> cacheManager.registerCustomCache("report", reportCache());
//  }
//
//  private Cache<Object, Object>  reportCache() {
//    return Caffeine.newBuilder()
//            .expireAfterWrite(1, TimeUnit.MINUTES)
//            .build()
//            ;
//  }
//
//}
我认为这有点“愚蠢”。
有可能,有一些春季配置,类似

springboot.cache.enabled=true

(如果存在)或我自己的自定义属性以启用/禁用缓存?

您可以在配置类上使用
@ConditionalOnProperty

注释

@Configuration @EnableCaching @ConditionalOnProperty("my.property.cache.enabled") class ReportCacheConfiguration { ... }

如果不正确,将不会启用所有配置文件
    

java spring-boot caching spring-cache caffeine-cache
1个回答
0
投票
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.