本文转自:http://hanqunfeng.iteye.com/blog/605123
之前为大家介绍了如何使用spring注解来进行缓存配置 (EHCache 和 OSCache)的简单的例子,详见
Spring基于注解的缓存配置--EHCache AND OSCache
现在介绍一下如何在基于注解springMVC的web应用中使用注解缓存,其实很简单,就是将springMVC配置文件与缓存注解文件一起声明到context中就OK了。
下面我就来构建一个基于spring注解小型的web应用,这里我使用EHCache来作为缓存方案。
首先来看一下目录结构,如下:
jar依赖:
ehcache-core-1.7.2.jar
jakarta-oro-2.0.8.jar
slf4j-api-1.5.8.jar
slf4j-jdk14-1.5.8.jar
cglib-nodep-2.1_3.jar
commons-logging.jar
log4j-1.2.15.jar
spring-modules-cache.jar
spring.jar
jstl.jar
standard.jar
接着我们来编写web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
id="WebApp_ID" version="2.4"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>SpringCacheWeb</display-name>
<!-- 由spring加载log4j -->
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>classpath:log4j.properties</param-value>
</context-param>
<!-- 声明spring配置文件 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/spring-servlet.xml
</param-value>
</context-param>
<!-- 使用UTF-8编码 -->
<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
<!-- 负责初始化log4j-->
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
<!-- 负责初始化spring上下文-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- springMVC控制器-->
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>10</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
</welcome-file-list>
</web-app>
接着我们来编写spring-servlet.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://www.springmodules.org/schema/ehcache"
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://www.springmodules.org/schema/ehcache http://www.springmodules.org/schema/cache/springmodules-ehcache.xsd"
default-lazy-init="true">
<!--启用注解 定义组件查找规则 -->
<context:component-scan base-package="com.netqin">
<context:include-filter type="annotation"
expression="org.springframework.stereotype.Controller" />
<context:include-filter type="annotation"
expression="org.springframework.stereotype.Service" />
<context:include-filter type="annotation"
expression="org.springframework.stereotype.Repository" />
</context:component-scan>
<!-- 视图查找器 -->
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.JstlView">
</property>
<property name="prefix" value="/WEB-INF/jsp/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
<!-- 加载ehcache缓存配置文件
说明:在这里我遇到了这样一个问题,当使用@Service等注解的方式将类声明到配置文件中时,
就需要将缓存配置import到主配置文件中,否则缓存会不起作用
如果是通过<bean>声明到配置文件中时,
则只需要在web.xml的contextConfigLocation中加入applicationContext-ehcache.xml即可,
不过还是推荐使用如下方式吧,因为这样不会有任何问题
-->
<import resource="classpath:applicationContext-ehcache.xml"/>
</beans>
ok,我们接着编写applicationContext-ehcache.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:ehcache="http://www.springmodules.org/schema/ehcache"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springmodules.org/schema/ehcache http://www.springmodules.org/schema/cache/springmodules-ehcache.xsd">
<ehcache:config configLocation="classpath:ehcache.xml"
id="cacheProvider" />
<ehcache:annotations providerId="cacheProvider">
<ehcache:caching cacheName="testCache" id="testCaching" />
<ehcache:flushing cacheNames="testCache" id="testFlushing" />
</ehcache:annotations>
</beans>
ehcache.xml如下:
<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="ehcache.xsd" updateCheck="true"
monitoring="autodetect">
<diskStore path="java.io.tmpdir"/>
<defaultCache
maxElementsInMemory="10000"
eternal="false"
timeToIdleSeconds="120"
timeToLiveSeconds="120"
overflowToDisk="true"
maxElementsOnDisk="10000000"
diskPersistent="false"
diskExpiryThreadIntervalSeconds="120"
memoryStoreEvictionPolicy="LRU"
/>
<cache name="testCache"
maxElementsInMemory="10000"
maxElementsOnDisk="1000"
eternal="false"
overflowToDisk="true"
diskSpoolBufferSizeMB="20"
timeToIdleSeconds="300"
timeToLiveSeconds="600"
memoryStoreEvictionPolicy="LFU"
/>
</ehcache>
ok,配置文件都完成了,接着我们来编写controller、service和dao
1.CacheDemoController:
package com.netqin.function.cacheDemo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class CacheDemoController {
@Autowired
private CacheDemoService service;
@RequestMapping("/demo.do")
public String handleIndex(Model model) {
System.out.println(service.getName(0));
model.addAttribute("name", service.getName(0));
return "cacheDemo";
}
@RequestMapping("/demoFulsh.do")
public String handleFulsh(Model model) {
service.flush();
return "cacheDemo";
}
}
2.CacheDemoService :
package com.netqin.function.cacheDemo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springmodules.cache.annotations.CacheFlush;
import org.springmodules.cache.annotations.Cacheable;
@Service
public class CacheDemoService {
@Autowired
private CacheDemoDao dao;
@Cacheable(modelId = "testCaching")
public String getName(int id){
System.out.println("Processing testCaching");
return dao.getName(id);
}
@CacheFlush(modelId = "testFlushing")
public void flush(){
System.out.println("Processing testFlushing");
}
}
我们只对service层加入了注解缓存配置。
接着我们来写一个简单的页面,cacheDemo.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
CacheDemo:${name}
</body>
</html>
ok,一切就绪,我们启动服务器,并访问http://localhost:8080/cache/demo.do
多请求几次,请求两次的输出结果:
Processing testCaching
NameId:0
NameId:0
说明缓存起作用了,ok!
接着我们刷新该缓存,访问http://localhost:8080/cache/demoFulsh.do
再请求http://localhost:8080/cache/demo.do
输出结果:
Processing testCaching
NameId:0
NameId:0
Processing testFlushing
Processing testCaching
NameId:0
缓存刷新成功。
-
- 大小: 20.9 KB
分享到:
相关推荐
在本实例中,我们将深入探讨如何在Spring框架中利用注解来实现缓存配置,特别是在Web应用程序中的实际应用。Spring Cache是一个强大的功能,它允许我们高效地管理应用程序中的数据,减少不必要的数据库查询,提高...
通过以上内容,我们可以看到Spring如何利用注解简化了缓存配置,以及如何结合EHCache或OSCache实现高效缓存管理。理解和熟练掌握这些知识,对于提升Java应用的性能至关重要。在实际开发中,根据项目的具体需求选择...
4. **缓存配置**: 缓存的配置可以很灵活,可以定义多个缓存,每个缓存有自己的策略,比如过期时间、最大元素数等。这些配置可以通过`@CacheConfig`注解在类级别上进行,也可以通过`@Cacheable`、`@CacheEvict`等...
本实例完美的实现了Spring基于注解整合Redis,只需在相应方法上加上注解便可实现操作redis缓存的功能,具体实现方法与运行测试方法请参见博文:http://blog.csdn.net/l1028386804/article/details/52141372
spring boot redis 注解缓存是基于spring boot 框架和redis缓存机制的结合,实现了缓存机制的自动化管理。下面将详细介绍spring boot redis 注解缓存的实现机制和使用方法。 一、spring boot redis 依赖关系 在...
总的来说,基于Spring的Web缓存涉及到Spring框架的缓存抽象、注解驱动的缓存逻辑、Maven依赖管理和实际缓存实现的选择与配置。理解并熟练掌握这些知识点,将有助于构建高性能、低延迟的Web应用。开发者需要考虑缓存...
在DAO层,可以使用Spring的`@CacheConfig`注解来统一设置缓存区域。 5. **测试验证**:编写测试用例,检查缓存是否正常工作。例如,查询同一条数据两次,第二次应直接从缓存中获取,不再进行数据库查询。 在提供的...
Spring提供了多种缓存抽象,包括基于注解的缓存管理和第三方缓存支持(如 EhCache、Guava Cache 或 Redis)。以下是对这个主题的详细阐述: 一、Spring缓存抽象 1. **@Cacheable**:这是最常用的注解,用于标记...
本项目主题是"基于Spring Boot上的注解缓存,自带轻量级缓存管理页面",这涉及到Spring Boot如何集成和管理缓存,以及如何通过注解来实现这一功能。在快应用开发中,缓存优化是提升系统性能、减少数据库负载的关键...
在SSM框架中引入Memcached并基于Spring的Cache注解进行整合,可以实现高效、分布式的数据缓存,提升系统性能。下面将详细阐述这一过程中的关键知识点。 1. **Memcached介绍**: Memcached是一款高性能、分布式的...
这是Maven项目,Spring集成Redis来实现注解缓存,代码配置方面都有详细代码,并在相关配置文件里添加了相关参考文档地址,都是博主自己一手敲出来的,如果觉得资源还可以,请五星好评哦,亲(づ ̄3 ̄)づ╭❤~
**三、缓存配置** 除了注解,我们还需要在Spring配置中定义缓存的配置,如缓存的名称、过期时间等。这可以通过`@EnableCaching`开启缓存支持,并通过`cacheManager`配置自定义的缓存管理器。 ```java @...
。。Spring11Boot基于注解的Redis缓存使用.docx
。。Spring11Boot基于注解的Redis缓存使用.pdf
总结来说,通过在Spring中使用Ehcache的注解配置,我们可以轻松地实现缓存管理,提高应用性能。在实际开发中,还需要根据具体需求调整缓存策略,如设置不同的缓存区域、过期策略等,以达到最佳效果。同时,需要注意...
在Spring的配置文件中,启用缓存注解支持,并指定使用的缓存管理器。例如,使用`<cache:annotation-driven>`标签: ```xml <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi=...
本项目是一个基于Spring框架的缓存管理系统,旨在通过注解驱动的缓存管理功能,提高应用程序的性能和响应速度。项目支持多种缓存操作,包括缓存数据的读取、写入、失效等,并提供了灵活的配置选项,以适应不同的应用...
Spring Cache提供了基于注解的缓存支持,允许开发者在方法级别声明缓存行为。通过在方法上使用`@Cacheable`、`@CacheEvict`和`@Caching`等注解,可以轻松地控制缓存的存取和清除。 1. **@Cacheable**:这个注解用于...
要实现自定义注解缓存机制,我们首先需要引入Spring Data Redis依赖。在`pom.xml`或`build.gradle`中添加对应的依赖项,确保Spring Boot能够与Redis通信。例如,在Maven项目中,可以添加以下依赖: ```xml ...
// 可以在这里设置更多缓存配置,如maxEntriesLocalHeap, timeToIdleSeconds等 return cacheCfg; } } ``` 以上就是Spring中使用注解配置Ehcache的基本步骤。通过这种方式,我们可以轻松地在服务层实现数据的缓存...