【问题标题】:spring simplecachemanager not working on method callspring simplecachemanager 不处理方法调用
【发布时间】:2016-04-07 14:37:42
【问题描述】:

我开发了一个简单的应用程序来测试 spring 缓存抽象。这个应用程序使用 SimpleCacheManager 将数据存储在地图中。调用从 MVC 控制器到服务到 dao。服务类方法用 @Cacheble("test") 注释,是一个公共方法,有一个字符串类型的参数并返回字符串。现在我们需要通过传递给这个服务类方法的参数来缓存这些值。

这里是缓存配置

<cache:annotation-driven cache-manager="cacheManager" />
<bean id="cacheManager" class="org.springframework.cache.support.SimpleCacheManager">
    <property name="caches">
        <set>
            <bean
              class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean"
              name="test"/>
        </set>
    </property>
</bean>

方法注解是这样的

@Cacheable(value="test",key="#id")
public String getProductName(final String id) {

不知何故,它总是在进行 db 调用。我做错了什么?

【问题讨论】:

    标签: spring spring-mvc


    【解决方案1】:

    您的缓存名称错误。 你写

    @Cacheable(value="test",key="#id")
    public String getProductName(final String id) {
    

    使用缓存名称“测试” 但是在您的配置中,您没有名称为“test”的缓存

    【讨论】:

    • 您在调试输出中看到缓存管理器已创建吗?
    • 是的,我确实看到它正在被创建,即使我已经将 CacheManager 注入到我们的一个 bean 中以查看其中的数据。
    • 疯了,在我的应用程序中,我使用没有键值的注释。只有@Cacheable(value="test") 你试过这个吗?
    • 是的,我也通过在线示例进行了尝试。但没有运气。一些如何不拦截该方法调用来进行缓存。不知道我是否在类路径或其他配置中缺少任何库。
    • 我使用 java config 但我没有额外的配置或库 @EnableWebMvc @Configuration @EnableCaching public class SpringConfiguration extends WebMvcConfigurerAdapter { @Bean public CacheManager cacheManager() { SimpleCacheManager cacheManager = new SimpleCacheManager(); cacheManager.setCaches(Arrays.asList(new ConcurrentMapCache("test"))); return cacheManager; } }
    猜你喜欢
    • 2012-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多