`
冷静
  • 浏览: 146944 次
  • 性别: Icon_minigender_1
  • 来自: 佛山
社区版块
存档分类
最新评论

Spring基于注解的缓存配置

阅读更多

本文转自: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框架中利用注解来实现缓存配置,特别是在Web应用程序中的实际应用。Spring Cache是一个强大的功能,它允许我们高效地管理应用程序中的数据,减少不必要的数据库查询,提高...

    Spring基于注解的缓存配置--EHCache AND OSCache

    通过以上内容,我们可以看到Spring如何利用注解简化了缓存配置,以及如何结合EHCache或OSCache实现高效缓存管理。理解和熟练掌握这些知识,对于提升Java应用的性能至关重要。在实际开发中,根据项目的具体需求选择...

    spring简单的缓存

    4. **缓存配置**: 缓存的配置可以很灵活,可以定义多个缓存,每个缓存有自己的策略,比如过期时间、最大元素数等。这些配置可以通过`@CacheConfig`注解在类级别上进行,也可以通过`@Cacheable`、`@CacheEvict`等...

    Spring基于注解整合Redis完整实例

    本实例完美的实现了Spring基于注解整合Redis,只需在相应方法上加上注解便可实现操作redis缓存的功能,具体实现方法与运行测试方法请参见博文:http://blog.csdn.net/l1028386804/article/details/52141372

    3.1、spring boot redis注解缓存Cacheable (value) 1

    spring boot redis 注解缓存是基于spring boot 框架和redis缓存机制的结合,实现了缓存机制的自动化管理。下面将详细介绍spring boot redis 注解缓存的实现机制和使用方法。 一、spring boot redis 依赖关系 在...

    基于Spring的Web缓存

    总的来说,基于Spring的Web缓存涉及到Spring框架的缓存抽象、注解驱动的缓存逻辑、Maven依赖管理和实际缓存实现的选择与配置。理解并熟练掌握这些知识点,将有助于构建高性能、低延迟的Web应用。开发者需要考虑缓存...

    spring二级缓存

    在DAO层,可以使用Spring的`@CacheConfig`注解来统一设置缓存区域。 5. **测试验证**:编写测试用例,检查缓存是否正常工作。例如,查询同一条数据两次,第二次应直接从缓存中获取,不再进行数据库查询。 在提供的...

    spring自动加载缓存

    Spring提供了多种缓存抽象,包括基于注解的缓存管理和第三方缓存支持(如 EhCache、Guava Cache 或 Redis)。以下是对这个主题的详细阐述: 一、Spring缓存抽象 1. **@Cacheable**:这是最常用的注解,用于标记...

    基于spring boot上的注解缓存,自带轻量级缓存管理页面.zip

    本项目主题是"基于Spring Boot上的注解缓存,自带轻量级缓存管理页面",这涉及到Spring Boot如何集成和管理缓存,以及如何通过注解来实现这一功能。在快应用开发中,缓存优化是提升系统性能、减少数据库负载的关键...

    (SSM框架)memcached整合Spring基于Cache注解.

    在SSM框架中引入Memcached并基于Spring的Cache注解进行整合,可以实现高效、分布式的数据缓存,提升系统性能。下面将详细阐述这一过程中的关键知识点。 1. **Memcached介绍**: Memcached是一款高性能、分布式的...

    Spring + Redis + 注解缓存 源码下载

    这是Maven项目,Spring集成Redis来实现注解缓存,代码配置方面都有详细代码,并在相关配置文件里添加了相关参考文档地址,都是博主自己一手敲出来的,如果觉得资源还可以,请五星好评哦,亲(づ ̄3 ̄)づ╭❤~

    spring-data-redis基于注解的实现方式

    **三、缓存配置** 除了注解,我们还需要在Spring配置中定义缓存的配置,如缓存的名称、过期时间等。这可以通过`@EnableCaching`开启缓存支持,并通过`cacheManager`配置自定义的缓存管理器。 ```java @...

    Spring11Boot基于注解的Redis缓存使用.docx

    。。Spring11Boot基于注解的Redis缓存使用.docx

    Spring11Boot基于注解的Redis缓存使用.pdf

    。。Spring11Boot基于注解的Redis缓存使用.pdf

    Spring + Ehcache 注解形式配置

    总结来说,通过在Spring中使用Ehcache的注解配置,我们可以轻松地实现缓存管理,提高应用性能。在实际开发中,还需要根据具体需求调整缓存策略,如设置不同的缓存区域、过期策略等,以达到最佳效果。同时,需要注意...

    Spring 与Ehcache实现基于方法的缓存

    在Spring的配置文件中,启用缓存注解支持,并指定使用的缓存管理器。例如,使用`&lt;cache:annotation-driven&gt;`标签: ```xml &lt;beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi=...

    (源码)基于Spring框架的缓存管理系统.zip

    本项目是一个基于Spring框架的缓存管理系统,旨在通过注解驱动的缓存管理功能,提高应用程序的性能和响应速度。项目支持多种缓存操作,包括缓存数据的读取、写入、失效等,并提供了灵活的配置选项,以适应不同的应用...

    spring-cache(通过key值更新缓存)

    Spring Cache提供了基于注解的缓存支持,允许开发者在方法级别声明缓存行为。通过在方法上使用`@Cacheable`、`@CacheEvict`和`@Caching`等注解,可以轻松地控制缓存的存取和清除。 1. **@Cacheable**:这个注解用于...

    自定义注解实现缓存机制

    要实现自定义注解缓存机制,我们首先需要引入Spring Data Redis依赖。在`pom.xml`或`build.gradle`中添加对应的依赖项,确保Spring Boot能够与Redis通信。例如,在Maven项目中,可以添加以下依赖: ```xml ...

    Spring 使用注解配置使用ehcache

    // 可以在这里设置更多缓存配置,如maxEntriesLocalHeap, timeToIdleSeconds等 return cacheCfg; } } ``` 以上就是Spring中使用注解配置Ehcache的基本步骤。通过这种方式,我们可以轻松地在服务层实现数据的缓存...

Global site tag (gtag.js) - Google Analytics