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