【问题标题】:spring - using google guava cache春天 - 使用谷歌番石榴缓存
【发布时间】:2015-08-19 10:32:57
【问题描述】:

我正在尝试在我的 spring 应用程序中使用 google guava 缓存,但结果永远不会缓存。

这是我的步骤:

在配置文件中:

@EnableCaching
@Configuration
public class myConfiguration {
        @Bean(name = "CacheManager")
        public CacheManager cacheManager() {
            return new GuavaCacheManager("MyCache");
        }
}

在课堂上我想使用缓存:

public class MyClass extends MyBaseClass {
    @Cacheable(value = "MyCache")
    public Integer get(String key) {
        System.out.println("cache not working");
        return 1;
    }
}

然后当我打电话时:

MyClass m = new MyClass();
m.get("testKey");
m.get("testKey");
m.get("testKey");

每次都进入函数而不使用缓存: 控制台:

 cache not working
 cache not working 
 cache not working

有人知道我缺少什么或如何调试吗?

【问题讨论】:

  • 你在你的 spring 配置中添加了一个 CacheBuilder 吗?
  • 为什么它应该起作用?您正在自己创建该类的新实例,而您应该使用 spring 配置(并因此代理)实例以进行缓存工作。
  • @m。你能解释一下吗?你是什​​么意思弹簧配置实例?
  • Spring 使用 AOP 来应用缓存,但是您使用的是自己的 MyClass 实例,它没有被 spring 代理。无论您要对其进行多少配置,它都行不通。将MyClass 配置为spring bean,从上下文中获取一个/实例并使用它而不是您自己的实例

标签: java spring caching google-guava-cache


【解决方案1】:

您不应该自己管理 spring bean。让spring来管理它。

@EnableCaching
@Configuration
public class myConfiguration {
        @Bean(name = "CacheManager")
        public CacheManager cacheManager() {
            return new GuavaCacheManager("MyCache");
        }

        @Bean
        public MyClass myClass(){
            return new MyClass();
        }
}

之后,您应该以托管方式使用 MyClass。

public static void main(String[] args) throws Exception {
    final ApplicationContext applicationContext = new AnnotationConfigApplicationContext(myConfiguration.class);
    final MyClass myclass = applicationContext.getBean("myClass");
    myclass.get("testKey");
    myclass.get("testKey");
    myclass.get("testKey");
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多