在Spring中快速使用EHCache注解.docx
《在Spring中快速使用EHCache注解.docx》由会员分享,可在线阅读,更多相关《在Spring中快速使用EHCache注解.docx(17页珍藏版)》请在冰豆网上搜索。
在Spring中快速使用EHCache注解
在Spring中快速使用EHCache注解
作为一名Java开发人员你一定想知道如何在Spring应用中使用新的Ehcache注解功能;是吧?
ehcache-spring-annotatios是获得Apache认证的一个开源项目;它大大简化了在Spring应用中基于业界使用广泛的Ehacche-2.0版本实现缓存的技术,1.1.2版本的ehcache-spring-annotations刚刚发布不久,在本文中,我将会介绍如何在一个web工程时使用ehcache-spring-annotations实现缓存机制。
创建一个Web工程
在本例中,我们将会创建一个基于SpringMVC的web工程,如果您使用的IDE是Eclipse的话请确保您安装了m2eclipse插件(译者注:
因为我们的工程基于Maven构建);接着创建一个基于JAVAEE5Web应用模型的Maven工程(groupid:
org.codehaus.mojo.archetypes,artifactid:
webapp-jee5)。
上述示例在Eclipse3.6下可以很好的运行。
工程结构
首先我创建了一个简单的web工程,项目中包含一个控制器:
MessageController:
1.@Controller
2.public class MessageController {
3. @Autowired(required = true)
4. private MessageStorage messageStorage;
5. public MessageController(MessageStorage messageStorage) {
6. super();
7. this.messageStorage = messageStorage;
8. }
9. public MessageController() {
10. }
11. @RequestMapping(method = RequestMethod.GET, value = "/message/add")
12. public ModelAndView messageForm() {
13. return new ModelAndView("message-form", "command", new Message());
14. }
15. @RequestMapping(method = RequestMethod.POST, value = "/message/add")
16. public ModelAndView addMessage(@ModelAttribute Message message) {
17. messageStorage.addMessage(message);
18. return getMessageById(message.getId());
19. }
20. @RequestMapping(method = RequestMethod.GET, value = "/message/{id}")
21. public ModelAndView getMessageById(@PathVariable("id") long id) {
22. Message message = messageStorage.findMessage(id);
23. ModelAndView mav = new ModelAndView("message-details");
24. mav.addObject("message", message);
25. return mav;
26. }
27. @RequestMapping(method = RequestMethod.GET, value = "/message")
28. public ModelAndView getAllMessages() {
29. Collection messages = messageStorage.findAllMessages();
30. ModelAndView mav = new ModelAndView("messages");
31. mav.addObject("messages", new CollectionOfElements(messages));
32. return mav;
33. }
34.}
上面的控制器依赖于一个简单的DAO对象:
MessageStorage,其实现如下:
1.public interface MessageStorage {
2. Message findMessage(long id);
3. Collection findAllMessages();
4. void addMessage(Message message);
5. void setDelegate(MessageStorage storageDelegate);
6.}
MessageStorage接口的唯一实现类是MemoryMessageStorage:
1.@Component
2.public class MemoryMessageStorage implements MessageStorage {
3.
4. private Map messages;
5. private AtomicLong newID;
6.
7. @PostConstruct
8. public void initialize() {
9. // add some messages
10. addMessage(new Message("user:
1", "content-1"));
11. addMessage(new Message("user:
2", "content-2"));
12. addMessage(new Message("user:
3", "content-3"));
13. addMessage(new Message("user:
4", "content-4"));
14. addMessage(new Message("user:
5", "content-5"));
15. }
16.
17. @Override
18. @Cacheable(cacheName = "messageCache")
19. public Message findMessage(long id) {
20. //...
21. }
22. @Override
23. @Cacheable(cacheName = "messagesCache")
24. public Collection findAllMessages() {
25. //...
26. }
27. @Override
28. @TriggersRemove(cacheName = "messagesCache", when = When.AFTER_METHOD_INVOCATION, removeAll = true)
29. public void addMessage(Message message) {
30. //...
31. }
32.}
通过如下的所展示的必须的依赖配置之后我们就可以运行这个应用程序了(见下载选项获取完整的应用程序代码)
1.
2.
3. javax.servlet
4. servlet-api
5. 2.5
6. provided
7.
8.
9. javax.servlet.jsp
10. jsp-api
11. 2.1
12. provided
13.
14.
15. junit
16. junit
17. 4.8.1
18. test
19.
20.
21. org.springframework
22. spring-webmvc
23. 3.0.3.RELEASE
24. jar
25. compile
26.
27.
28. org.springframework
29. spring-oxm
30. 3.0.3.RELEASE
31. jar
32. compile
33.
34.
35. javax.servlet
36. jstl
37. 1.2
38. jar
39. compile
40.
41.
介绍基于Spring的web工程中使用Ehcache注解
现在该给项目增加缓存能力了,我们要为MemoryMessageStorage类提供缓存机制。
首先,在POM文件中加入所需的依赖:
Spring中Ehcache的注解依赖项:
1.
2. com.googlecode.ehcache-spring-annotations
3. ehcache-spring-annotations
4. 1.1.2
5. jar
6. compile
7.
在写本文的时候2.2.0版本的Ehcache也可用了,但是我们使用2.1.0版本的Ehcache,因为EhcacheAnnotationsforSpring1.1.2版本是基于2.1.0版本的Ehcache的。
我还填加了SLF4J API实现的依赖(译者注:
SLF4J不是具体的日志解决方案,它只服务于各种各样的日志系统。
按照官方的说法,SLF4J是一个用于日志系统的简单Facade,允许最终用户在部署其应用时使用其所希望的日志系统。
):
1.
2. org.slf4j
3. slf4j-log4j12
4. 1.6.1
5. jar
6. compile
7.
通过上面依赖的配置,我们就可以使用EhcacheAnnotationsforSpring了,我们现在就如同前面所说的给MemoryMessageStorage添加注解。
这里列出几条所需达到的目标:
· 当调用findMessage(long)方法时用名为“messageCache”的名称缓存结果信息。
· 当调用findAllMessages()方法时用名为“messagesCache”的名称缓存结果信息。
· 当调用addMessage(Message)方法时清除所有“messagesCache”名称下的缓存项。
为了达到上面所说的几个目标,我们使用 @Cachable和@TriggersRemove两个注解,见下面介绍:
1.@Component
2.public class MemoryMessageStorage implements MessageStorage {
3. private Map messages;
4. private AtomicLong newID;
5. public MemoryMessageStorage() {
6. // ...
7. }
8. @Override
9. @Cacheable(cacheName = "messageCache")
10. public Message findMessage(long id) {
11. // ...
12. }
13. @Override
14. @Cacheable(cacheName = "messagesCache")
15. public Collection findAllMessages() {
16. // ...
17. }
18. @Override
19. @TriggersRemove(cacheName = "messagesCache", when = When.AFTER_METHOD_INVOCATION, removeAll = true)
20. public void addMessage(Message message) {
21. // ...
22. }
23.}
Spring和Ehcache的配置
注解已经加到位了,接下来我们需要配置这个项目去使它们起作用,通过Spring的配置文件就可以达到这个目的:
1.
xml version="1.0" encoding="UTF-8"?
>
2.//.springframework.org/schema/beans"
3. xmlns:
xsi=":
//.w3.org/2001/XMLSchema-instance"
4. xmlns:
context=":
//.springframework.org/schema/context"
5. xmlns:
oxm=":
//.springframework.org/schema/oxm"
6. xmlns:
mvc=":
//.springframework.org/schema/mvc"
7. xmlns:
ehcache=":
//ehcache-spring-
8. xsi:
schemaLocation=":
//.springframework.org/schema/beans :
//.springframework.org/schema/beans/spring-beans-3.0.xsd
9. :
//.springframework.org/schema/context :
//.springframework.org/schema/context/spring-context-3.0.xsd
10. :
//.springframework.org/schema/oxm :
//.springframework.org/schema/oxm/spring-oxm-3.0.xsd
11. :
//.springframework.org/schema/mvc :
//.springframework.org/schema/mvc/spring-mvc-3.0.xsd
12. :
//ehcache-spring- :
//ehcache-spring-
13. annotation-driven />
14. config cache-manager="cacheManager">
15. evict-expired-elements interval="60" />
16.
config>
17.
18.
-- rest of the file omitted -->
19.
最后要做的是添加Ehcache的配置文件,在web应用程序的/WEB-INF目录下面创建ehcache.xml的xml文件:
1.
xml version="1.0" encoding="UTF-8"?
>
2.xsi=":
//.w3.org/2001/XMLSchema-instance" xsi:
noNamespaceSchemaLocation=":
//ehcache.org/ehcache.xsd">
3.
4.
5.
6.
接下来需要配置缓存manager使它去管理Ehcache的配置,在Spring上下文的配置文件中加入cacheManager 这个Bean的配置,并需要在其中加入configLocation属性:
1.
2.
3.
配置完毕,在Tomcat6应用服务器上运行该应用程序(RunAs–Runonserver),你会发现有日志输出-如果DEBUG模式被允许的话你会发现类似如下的条目输出:
1.DEBUG [net.sf.ehcache.Cache]:
Initialised cache:
messagesCache