当前位置: 首页 > 知识库问答 >
问题:

Spring Boot-如何在开发过程中禁用@Cacheable?

章增
2023-03-14

我在寻找两件事:

>

  • 如何使用Spring boot“dev”概要文件在开发过程中禁用所有缓存。在应用程序中,不需要有一个通用设置来全部关闭它。财产。最简单的方法是什么?

    如何禁用特定方法的缓存?我试着这样使用SpEl:

    @Cacheable(value = "complex-calc", condition="#${spring.profiles.active} != 'dev'}")
    public String someBigCalculation(String input){
       ...
    }
    

    但我可以让它工作。有几个问题与此相关,但它们涉及XML配置或其他内容,但我使用的是SpringBoot1.3。3,这使用自动配置。

    我不想把事情复杂化。

  • 共有3个答案

    马正初
    2023-03-14

    对于第二个问题,请执行以下操作:

    编写一个确定特定概要文件是否处于活动状态的方法(环境是您的注入环境)

    boolean isProfileActive(String profile) { 
       return Arrays.asList(environment.getActiveProfiles()).contains(profile);
    }
    

    然后将其用于可缓存注释上的spel条件

    微生博简
    2023-03-14

    David Newcomb的评论告诉我们真相:

    spring.cache.type=NONE不会关闭缓存,它会阻止缓存。也就是说,它仍然在你的程序中添加了27层AOP/拦截器堆栈,只是它不做缓存。这取决于他所说的“全部关掉”是什么意思。

    使用此选项可能会加快应用程序的启动,但也可能会有一些开销。

    1)完全禁用Spring缓存功能

    @EnableCaching类移动到专用配置类中,我们将使用@Profile包装该类以启用它:

    @Profile("!dev")
    @EnableCaching
    @Configuration
    public class CachingConfiguration {}
    

    当然,如果您已经有了一个配置类,该类对开发环境以外的所有环境都启用,只需重新使用它:

    @Profile("!dev")
    //... any other annotation 
    @EnableCaching
    @Configuration
    public class NoDevConfiguration {}
    

    2) 使用假(noop)缓存管理器

    在某些情况下,通过概要文件激活@EnableCaching是不够的,因为您的某些类或应用程序的某些Spring依赖项期望从Spring容器中检索实现组织的bean。springframework。隐藏物CacheManager接口
    在这种情况下,正确的方法是使用一个伪实现,它允许Spring解析所有依赖项,而CacheManager的实现是无开销的。

    我们可以通过使用@Bean@Profile来实现它:

    import org.springframework.cache.support.NoOpCacheManager; 
    
    @Configuration
    public class CacheManagerConfiguration {
    
        @Bean
        @Profile("!dev")
        public CacheManager getRealCacheManager() {
            return new CaffeineCacheManager(); 
            // or any other implementation
            // return new EhCacheCacheManager(); 
        }
    
        @Bean
        @Profile("dev")
        public CacheManager getNoOpCacheManager() {
            return new NoOpCacheManager();
        }
    }
    

    或者,如果更合适,可以添加Spring。隐藏物type=NONE属性,该属性生成与M.Deinum答案中写入的结果相同的结果。

    谢飞舟
    2023-03-14

    默认情况下,会自动检测并配置缓存类型。但是,您可以通过添加spring来指定要使用的缓存类型。隐藏物在配置中键入。要禁用它,请将该值设置为NONE

    当您想要为特定的概要文件执行此操作时,请将其添加到该概要文件应用程序中。属性在本例中,修改应用程序-dev.properties并添加

    spring.cache.type=NONE
    

    这将禁用缓存。

     类似资料:
    • 我正在用Springboot和Angular 8创建一个应用程序。我对Springboot是新手。我的计划是在中构建前端(-将从)调用。 另一方面,如果我使用启动前端(在开发过程中),那么由于跨源问题,它将无法工作。

    • 问题内容: 当用户禁用JavaScript时,我正在尝试调试网站的功能。我想知道如何禁用Google Chrome DevTools中页面的JavaScript? 问题答案: 单击“ 开发人员工具”角落的菜单,单击“设置”,然后在下进行检查。

    • 我试图在用户禁用其JavaScript时调试网站的功能。我想知道如何从Google Chrome DevTools中禁用JavaScript页面?

    • 似乎Springboot自动配置自己来使用Tomcat的Logback。我想禁用它,并使用我在类路径中提供的一个。 LoggerFactory不是LoggerContext,但Logback位于类路径上。删除Logback或类[org.slf4j.impl.SimpleLoggerFactory]的竞争实现(类org.slf4j.impl.SimpleLoggerFactory)对象必须是类ch.

    • 我试图在我的基于微服务的Spring启动应用程序中实现普罗米修斯,部署在weblogic服务器上。作为POC的一部分,我已经将配置作为一场战争的一部分。为了启用它,我在下面设置了配置- 应用属性 格拉德尔- 但执行器请求被现有的拦截器阻止。它要求在特定于我们项目的标题中传递值。通过postman(http:localhost:8080/abc/activator/prometheus),我可以测试

    • 学习各种组件和工具帮助你对Django应用进行改进和测试: