1

私はehcacheとSpring Annotationの統合が初めてです。Spring 2.5で以下のようにcom.googlecode.ehcache.annotations.Cacheableアノテーションを使用していますが、戻り値をキャッシュすることはありません。空のリストを返し、コントローラーが呼び出しを行うたびにメソッドが呼び出されます。助けてください。cache.getKeys()

次のメソッドは、マップされた jsp からの要求に応じてコントローラーによって呼び出されるインターフェイスの実装であり、URL.cacheID常に一定であり、取得した値をハッシュマップに格納し、アプリケーションで必要なときにこれらのマップにアクセスするというのが私の考えです。

 @Override
 @Cacheable(cacheName="partnerMapping")
 public String retrievePartnerMappings(String cacheID) {
   partnerCodeToNameMapping = new HashMap<String, String>();
   partnerNameToCodeMapping = new HashMap<String, String>();
   Cache cache = cacheManager.getCache("partnerMapping");
   log.debug(cache.getKeys().toString());
   try {
   log.debug("Querying for partner mappings...");
   Collection<PartnerMapping> partnerMappings = this.getSimpleJdbcTemplate()
      .query(
          sqlStatements.getProperty("selectAllSql"),
          ParameterizedBeanPropertyRowMapper
              .newInstance(PartnerMapping.class));
   for (PartnerMapping mapping : partnerMappings) {
     partnerCodeToNameMapping.put(mapping.getPartnerCode().toUpperCase(),
        mapping.getPartnerName());
     partnerNameToCodeMapping.put(mapping.getPartnerName(), mapping
        .getPartnerCode().toUpperCase());
   }
   return "success";
 } catch (DataAccessException e) {
  log.error("Unable to retrieve the partner mappings!!", e);
  return "fail";
 }
}

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">

<cache name="partnerMapping" maxElementsInMemory="100" eternal="false"
   overflowToDisk="false" timeToLiveSeconds="120" timeToIdleSeconds="120"/>
</ehcache>

spring-context.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:context="http://www.springframework.org/schema/context"
xmlns:ehcache="http://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring"
xsi:schemaLocation="http://www.springframework.org/schema/beans                         
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd        
http://www.springframework.org/schema/context 
http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring 
http://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring/ehcache-spring-1.1.xsd">

  <ehcache:annotation-driven />
  <context:annotation-config />
  <context:component-scan base-package="com.spring.ehcache" />

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

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

</beans>
4

1 に答える 1

0

これを機能させることができました。別のxml構成ではなく、メインのdispatcherServlet xmlにehcache構成を含めてから、Springコンテキストに含めました。

于 2012-11-06T03:36:47.733 に答える