2012-07-13 27 views
8

Belirli bir EhCache örneğini ada göre bulmalıyım ve mümkünse otomatik olarak gezinmeyi tercih ederim. Aşağıdaki otomatik olarak yapılandırılan denetleyici göz önüne alındığında, aradığım önbellek örneğinde nasıl otomatik olarak bağlanabilirim?Spring ile bir EhCache örneği alınıyor ... akıllıca

@Controller 
public class MyUniqueService { 
    ... 
} 

<beans ...> 
    <ctx:component-scan base-package="my.controllers"/> 
    <mvc:annotation-driven /> 
</beans> 

nasıl uygulama bağlamında EHCache yapılandırırım? Ehcache'den ehcache.xml dosyasını /WEB-INF/ dizinime yükleyen herhangi bir günlük mesajı göremiyorum. Bunu nasıl yüklerim?

nasıl Bahar uygulaması ile EHCache entegre edebilirsiniz benim MyUniqueService denetleyicisi içine verilen bir isimle bir önbellek benim /WEB-INF/ dizinden ehcache.xml dosyası yüklemek ve autowire var mı?

cevap

16

Öncelikle böyle sende uygulama bağlamı bir EHCache CacheManager singleton'ununu oluşturmanız gerekir:

İşte configLocation
<bean id="myEhCacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"> 
    <property name="configLocation" value="classpath:my-ehcache.xml"/> 
</bean> 

sınıfyolundan yüklemek veya value="/WEB-INF/my-ehcache.xml" kullanacak şekilde ayarlanmıştır. Eğer "tamamen autowired" rota gitmek isterseniz yapın, Alternatif

@Controller 
public class MyUniqueService { 

    @Resource(name="myEhCacheManager") 
    private CacheManager cacheManager; 

    ... 
} 

:

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

kurulum Kumandanızda olarak

basitçe CacheManager örneğini enjekte gibi sınıf:

@Controller 
public class MyUniqueService { 

    @Autowired 
    private org.springframework.cache.CacheManager cacheManager; 

    public org.springframework.cache.Cache getUniqueObjectCache() { 
     return cacheManager.getCache("uniqueObjectCache"); 
    } 
} 

uniqueObjectCache sizin ehcache.xml önbellek tanımında bu önbellek örneğine karşılık gelir:

<cache name="uniqueObjectCache" 
     maxElementsInMemory="10000" 
     eternal="false" 
     timeToIdleSeconds="300" 
     timeToLiveSeconds="600" 
     memoryStoreEvictionPolicy="LRU" 
     transactionalMode="off"/> 

gerçek önbellek örneğini enjekte etmek için bir yolu yoktur, ancak yukarıda gösterildiği gibi, bir önbellek yöneticisi enjekte ve almak için kullanabilirsiniz İlginizi çekebilecek Önbellek

7

Gerçekten de! Eğer bir java yapılandırma sınıfını kullanmak istiyorsanız Veya: bağlam doğru sınıfıyla fasulye bulabilirseniz

 @Inject 
     private ResourceLoader resourceLoader; 

     @Bean 
     public CacheManager cacheManager() { 
      EhCacheCacheManager ehCacheCacheManager = new EhCacheCacheManager(); 
      try { 
       ehCacheCacheManager.setCacheManager(ehcacheCacheManager().getObject()); 
      } catch (Exception e) { 
       throw new IllegalStateException("Failed to create an EhCacheManagerFactoryBean", e); 
      } 
      return ehCacheCacheManager; 
     } 

     @Bean 
     public FactoryBean<net.sf.ehcache.CacheManager> ehcacheCacheManager() { 
      EhCacheManagerFactoryBean bean = new EhCacheManagerFactoryBean(); 
      bean.setConfigLocation(resourceLoader.getResource("classpath:ehcache.xml")); 
      return bean; 
     } 
9

Ayrıca autowire kullanabilirsiniz. İşte benim xml

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

<bean id="cache" class="net.sf.ehcache.Cache" factory-bean="cacheManager" factory-method="getCache"> 
    <constructor-arg value="CacheNameHere" />   
</bean> 

Ve java sınıf Bu kurulum benim için çalışıyor

@Autowired 
private net.sf.ehcache.Cache cache; 

yapılandırılmış nasıl.

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

Böyle spesifik önbelleği enjekte/alabilirsiniz:

+0

Bu, elbette yalnızca bir tane önbelleğe sahip olduğunuzu varsayar. –

+1

@ClintonBosch - Birden fazla kodunuz varsa, '@Qualifier ('cacheBeanId')' yi 'Autowired 'ile kullanırsınız – moshen