Spring和Ehache:Cachemanger

时间:2016-01-28 14:26:51

标签: java spring caching ehcache

我试图在Spring 4.2.3中使用Eh-Cache 2.8,我发现我们可以使用spring ehcache管理器,但在另一个博客中我发现我们可以直接在春天直接使用Ehcache管理器并使用Ehache annotataion。我很困惑哪种方法更好,更正确。 以下是代码配置: applicationContext.xml中 <?xml version =" 1.0"编码=" UTF-8"> < beans xmlns =" http://www.springframework.org/schema/beans"     的xmlns:=的xsi" HTTP://www.w3.org/2001/XMLSchema-instance"      的xmlns:P =" HTTP://www.springframework.org/schema/p"     的xmlns:上下文=" HTTP://www.springframework.org/schema/context"     的xmlns:缓存=' HTTP://www.springframework.org/schema/cache'     的xmlns:JEE =" HTTP://www.springframework.org/schema/jee"     的xmlns:TX =" HTTP://www.springframework.org/schema/tx"      的xmlns:JMS =" HTTP://www.springframework.org/schema/jms"     的xsi:的schemaLocation =" HTTP://www.springframework.org/schema/beans     http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee.xsd  http://www.springframework.org/schema/tx  http://www.springframework.org/schema/tx/spring-tx.xsd  http://www.springframework.org/schema/jms     http://www.springframework.org/schema/jms/spring-jms.xsd ">     < context:annotation-config />     < cache:annotation-driven />     < tx:annotation-driven proxy-target-class =" true" />     < tx:jta-transaction-manager />     < bean id =' ehcache' 类=' org.springframework.cache.ehcache.EhCacheManagerFactoryBean'         号码:configLocation ='类路径:ehcache.xml中'号码:共享='真' />     < bean id =' cacheManager'类=' org.springframework.cache.ehcache.EhCacheCacheManager'         号码:CacheManager中-REF =' ehcache的' /> < /豆类> 我在缓存中添加数据的代码 SubscribeData.java此类从MQ获取数据并将其添加到缓存中 import javax.jms.Message; import javax.jms.MessageListener; import javax.jms.TextMessage; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.Cache; import org.springframework.cache.CacheManager; 公共类SubscribeData实现MessageListener {     @Autowired     CacheManager chachemanager;     public void onMessage(Message m){         TextMessage message =(TextMessage)m;         尝试{             缓存cache = chachemanager.getCache(" cache");             cache.put(" key",message.getText());         } catch(例外e){             e.printStackTrace();         }     } } 在SubscribeData.class中,我从xml获取数据并将其添加到缓存中,这是正确的方法。我知道我这里没有使用缓存注释,但还有其他方法可以使用它。 以下是我的疑问 1)如上所述,我应该直接使用spring ehCache或ehCache,下面是一个例子 ehCache作为缓存管理器而不是spring ehCache管理器 @组态 @EnableCaching(proxyTargetClass = true) 公共类CacheConfig {     @豆     public CacheManager cacheManager(){         net.sf.ehcache.CacheManager ehcacheCacheManager = ehCacheManagerFactoryBean()。getObject();         返回新的EhCacheCacheManager(ehcacheCacheManager);     }     @豆     public EhCacheManagerFactoryBean ehCacheManagerFactoryBean(){         EhCacheManagerFactoryBean cacheMgrFB = new EhCacheManagerFactoryBean();         cacheMgrFB.setShared(真);         cacheMgrFB.setCacheManagerName("的CacheManager&#34);         cacheMgrFB.setConfigLocation(ehCacheConfigResource);         return cacheMgrFB;     } } 2)如何在void方法中向缓存添加数据,即不返回任何内容并且只想将数据添加到缓存的方法。

1 个答案:

答案 0 :(得分:0)

  1. 对于您的第一个问题,您并没有真正在第二个示例中使用Ehcache API,只是编写与上面的Spring XML相同的代码。所以在这种情况下,除非你有充分的理由为此设置代码,否则我会坚持使用XML,因为如果需要有一天,它会更容易更新配置。
  2. 您实际上是在SubscribeData示例中自行提供答案。您不能使用void方法,因为执行换行的代理无法访问需要发布的数据。