【问题标题】:ehCache and Spring MVC Error with HIbernate使用 HIbernate 的 ehCache 和 Spring MVC 错误
【发布时间】:2011-07-23 05:55:08
【问题描述】:

我试图让缓存在服务层方法上工作,但它仍然进入它并调用数据库。我的设置错了吗?

@Cacheable(cacheName="apiActivitiesCache", keyGenerator = @KeyGenerator (
            name = "ListCacheKeyGenerator",
            properties = {
                    @Property( name="useReflection", value="true" ),
                    @Property( name="checkforCycles", value="true" ),
                    @Property( name="includeMethod", value="false" )
            }
        )
    )
    public GetMemberActivitiesResponse getActivities(GetMemberActivitiesRequest request) {

servlet-context.xml

<ehcache:annotation-driven cache-manager="ehCacheManager" create-missing-caches="true"/>

    <ehcache:config cache-manager="ehCacheManager">
        <ehcache:evict-expired-elements interval="60" />
    </ehcache:config>

    <beans:bean id="ehCacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
        <beans:property name="configLocation"  value="/WEB-INF/spring/ehcache.xml"/>
    </beans:bean>

ehcache.xml

<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd">
    <defaultCache eternal="true" maxElementsInMemory="100" overflowToDisk="false" />
    <cache name="apiActivitiesCache" eternal="false"  
        maxElementsInMemory="100" overflowToDisk="false" diskPersistent="false"
        timeToIdleSeconds="0" timeToLiveSeconds="300"
        memoryStoreEvictionPolicy="LRU" />
</ehcache>

【问题讨论】:

    标签: caching spring-mvc ehcache


    【解决方案1】:

    您是否使用 Ehcache Spring Annotations (http://groups.google.com/group/ehcache-spring-annotations)? 这不适用于 Hibernate。

    【讨论】:

      【解决方案2】:

      我使用您的确切配置进行了尝试,并且成功了。您的服务类是否将 getActivities 方法配置为 Spring bean?

      另外,getActivities 方法是被另一个类调用,还是被同一个类中的另一个方法调用?

      【讨论】:

      • getActivities 方法在我的服务层ActivitiesService.java 中。它是从我的控制器层ActivitiesController.java 调用的。它是从控制器类中调用的,这有什么关系吗?
      【解决方案3】:

      getActivities 是由接口定义的吗? Spring 使用基于接口的 Java 代理作为注释包装器,因此所有带注释的方法都必须由接口定义。

      【讨论】:

      • 是的,它是由接口定义的。我必须用ecache属性装饰界面?
      • 不,注解可以在接口方法或实现方法上指定,都会被找到。另一个问题是您是否从另一个将 getActivities bean 作为依赖项注入的 bean 调用 getActivities?使用 Spring 代理的工作方式,不会拦截自调用。
      猜你喜欢
      • 2023-03-29
      • 2014-03-16
      • 2011-07-27
      • 2014-02-05
      • 2015-03-10
      • 2016-06-13
      • 2014-06-20
      • 1970-01-01
      相关资源
      最近更新 更多