`
jaesonchen
  • 浏览: 311548 次
  • 来自: ...
社区版块
存档分类
最新评论

spring ehcache配置

 
阅读更多
package com.jaeson.springstudy.cache;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import com.jaeson.hibernatestudy.bean.Student;

@RunWith(SpringJUnit4ClassRunner.class)
//配置@ContextConfiguration注解并使用该注解的locations属性指明spring和配置文件
@ContextConfiguration(locations = {"classpath:applicationContext.xml", "classpath:spring-hibernate.xml", "classpath:spring-mybatis.xml", "classpath:spring-ehcache.xml" })
public class TestCache {
	
	@Autowired
	private StudentManager manager;
	
	public void setStudentManager(StudentManager manager) {
		this.manager = manager;
	}
	
	@Test
	public void testEhcache() {
		
		Student stu = manager.findById("025b49ab208a4a358dfb4b1b53acd9d6");
		System.out.println("====================" + stu.getName());
		
		stu = manager.findById("025b49ab208a4a358dfb4b1b53acd9d6");
		System.out.println("====================" + stu.getName());
		
		manager.removeAll();
		
		stu = manager.findById("025b49ab208a4a358dfb4b1b53acd9d6");
		System.out.println("====================" + stu.getName());
		
		stu = new Student();
		stu.setName("testEhcache");
		stu.setSex(1);
		stu = manager.save(stu);
		System.out.println("after save====================" + stu.getId());
		
		stu = manager.findById(stu.getId());
		System.out.println("====================" + stu.getName());
		
		manager.delete(stu);
		stu = manager.findById(stu.getId());
		System.out.println("after delete====================" + (stu == null ? null : stu.getName()));
	}
}

 

package com.jaeson.springstudy.cache;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.CachePut;
//import org.springframework.cache.annotation.CacheConfig;

import com.jaeson.hibernatestudy.bean.Student;
import com.jaeson.hibernatestudy.bean.Clazz;
import com.jaeson.springstudy.dao.StudentDao;

@Service
@Transactional
//@CacheConfig(cacheNames="studentCache", key="#p0")
public class StudentManager {
	
	@Autowired
	@Qualifier("jdbcTemplateStudentDao")
	private StudentDao studentDao;
	
	public void setStudentDao(StudentDao studentDao) {
		this.studentDao = studentDao;
	}
	
	//对于使用@Cacheable标注的方法,Spring在每次执行前都会检查Cache中是否存在相同key的缓存元素,
	//如果存在就不再执行该方法,而是直接从缓存中获取结果进行返回,否则才会执行并将返回结果存入指定的缓存中。
	//不指定key时,使用默认的key生成策略KeyGenerator。
	//方法没有参数时,使用SimpleKey.EMPTY
	//只有一个参数时,使用该参数作为key
	//多于一个参数时,使用包含所有参数的SimpleKey(所有参数的hashCode)
	@Cacheable("studentCache")
	public Student findById(String id) {
		
		return this.studentDao.findById(id);
	}
	
	//将返回结果放入cache中,并使用EL指定的key生成策略
	@Cacheable(cacheNames="studentCache", key="#id")
	public List<Student> findByClassid(String id) {
		
		return this.studentDao.findByClassid(id);
	}
	
	//key="#p0.id" 表示第一个参数的id属性
	@Cacheable(cacheNames="studentCache", key="#p0.id")
	public List<Student> findByClass(Clazz clazz) {
		
		return this.studentDao.findByClassid(clazz.getId());
	}
	
	//与@Cacheable不同的是使用@CachePut标注的方法在执行前不会去检查缓存中是否存在之前执行过的结果,
	//而是每次都会执行该方法,并将执行结果以键值对的形式存入指定的缓存中。
	@CachePut(cacheNames="studentCache", key="#entity.id")
	public Student save(Student entity) {
		
		entity.setId(this.studentDao.save(entity));
		return entity;
	}
	
	//每次都直接执行update方法,并将结果放入cache
	@CachePut(cacheNames="studentCache", key="#entity.id")
	public Student update(Student entity) {
		
		this.studentDao.update(entity);
		return entity;
	}
	
	//@CacheEvict移除cache中相应的缓存项,evict操作默认在方法返回时进行,如果方法执行中抛出异常,则evict操作不会发生。
	//beforeInvocation=true表示在方法调用之前先进行cache的evict操作,allEntries=true表示清除所有的缓存项。
	@CacheEvict(cacheNames="studentCache", key="#entity.id", beforeInvocation=true)
	public void delete(Student entity) {
		
		this.studentDao.delete(entity);
	}
	
	//移除cache中相应的缓存项
	@CacheEvict("studentCache")
	public void deleteById(String id) {
		
		this.studentDao.deleteById(id);
	}
	
	//移除指定cache中的所有缓存项
	@CacheEvict(cacheNames="studentCache", allEntries=true)
	public void removeAll() {
		
		System.out.println("removeAll is called, evict all cache entry");
	}
}

 

    ehcache.xml

<?xml version="1.0" encoding="UTF-8"?>
<ehcache 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd">
	  
	<diskStore path="java.io.tmpdir"/>
	
	<!--
       name:缓存名称。
       maxElementsInMemory:缓存最大个数。
       eternal:对象是否永久有效,一但设置了,timeout将不起作用。
       timeToIdleSeconds:设置对象在失效前的允许闲置时间(单位:秒)。
       			仅当eternal=false对象不是永久有效时使用,可选属性,默认值是0,也就是可闲置时间无穷大。
       timeToLiveSeconds:设置对象在失效前允许存活时间(单位:秒)。
       			 仅当eternal=false对象不是永久有效时使用,默认是0.,也就是对象存活时间无穷大。
       overflowToDisk:当内存中对象数量达到maxElementsInMemory时,Ehcache将会对象写到磁盘中。
       diskSpoolBufferSizeMB:这个参数设置DiskStore(磁盘缓存)的缓存区大小。默认是30MB。每个Cache都应该有自己的一个缓冲区。
       maxElementsOnDisk:硬盘最大缓存个数。
       diskPersistent:是否缓存虚拟机重启期数据 Whether the disk store persists between restarts 
       			of the Virtual Machine. The default value is false.
       diskExpiryThreadIntervalSeconds:磁盘失效线程运行时间间隔,默认是120秒。
       memoryStoreEvictionPolicy:当达到maxElementsInMemory限制时,Ehcache将会根据指定的策略去清理内存。
       			 默认策略是LRU(最近最少使用)。你可以设置为FIFO(先进先出)或是LFU(较少使用)。
       clearOnFlush:内存数量最大时是否清除。
    -->
	
	<defaultCache
		maxElementsInMemory="10000"
		eternal="false"
		timeToIdleSeconds="120"
		timeToLiveSeconds="120"
		maxElementsOnDisk="1000000"
		diskExpiryThreadIntervalSeconds="120"
 		memoryStoreEvictionPolicy="LRU">
        <persistence strategy="localTempSwap"/>
	</defaultCache>
	
	<cache name="studentCache"
		maxElementsInMemory="1000"
		eternal="false"
		timeToIdleSeconds="120"
		timeToLiveSeconds="120"
		overflowToDisk="false"
		memoryStoreEvictionPolicy="LRU"/>

</ehcache>

   

    spring-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:cache="http://www.springframework.org/schema/cache"
	xmlns:p="http://www.springframework.org/schema/p"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xsi:schemaLocation="
		http://www.springframework.org/schema/beans 
		http://www.springframework.org/schema/beans/spring-beans-4.0.xsd 
		http://www.springframework.org/schema/cache 
		http://www.springframework.org/schema/cache/spring-cache.xsd 
		http://www.springframework.org/schema/tx 
		http://www.springframework.org/schema/tx/spring-tx-4.0.xsd 
		http://www.springframework.org/schema/context 
		http://www.springframework.org/schema/context/spring-context-4.0.xsd
		http://www.springframework.org/schema/aop 
        http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd" >
        
        
	<!-- 启用cache注解扫描,@CacheConfig/@Cacheable/@CachePut/@CacheEvict/@Caching -->
	<cache:annotation-driven />
	
	<!-- ehcache配置 -->
	<bean id="cacheManager" 
		class="org.springframework.cache.ehcache.EhCacheCacheManager" p:cache-manager-ref="ehcacheManager"/>
	<!-- EhCache library setup -->
	<bean id="ehcacheManager" 
		class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean" p:config-location="ehcache.xml"/>
</beans>

 

    pom.xml

<!-- ehcache -->
<dependency>
	<groupId>net.sf.ehcache</groupId>
	<artifactId>ehcache</artifactId>
	<version>2.10.1</version>
</dependency>

 

 

 

Running com.jaeson.springstudy.cache.TestCache


    [INFO][2016-04-28 18:23:38] com.jaeson.springstudy.dao.impl.JdbcTemplateStudentDaoImpl.findById(JdbcTemplateStudentDaoImpl.java:89) select s.id as id, s.name as name, s.sex as sex, s.clazz_id as student_clazz_id,  c.id as clazz_id, c.name as clazz_name  from student s left outer join clazz c on s.clazz_id = c.id  where s.id = ? 
    ====================jaesonchen
    ====================jaesonchen
removeAll is called, evict all cache entry

    [INFO][2016-04-28 18:23:39] com.jaeson.springstudy.dao.impl.JdbcTemplateStudentDaoImpl.findById(JdbcTemplateStudentDaoImpl.java:89) select s.id as id, s.name as name, s.sex as sex, s.clazz_id as student_clazz_id,  c.id as clazz_id, c.name as clazz_name  from student s left outer join clazz c on s.clazz_id = c.id  where s.id = ? 

    ====================jaesonchen
    [INFO][2016-04-28 18:23:39] com.jaeson.springstudy.dao.impl.JdbcTemplateStudentDaoImpl.save(JdbcTemplateStudentDaoImpl.java:160) insert into student (id, name, sex) values(?, ?, ?)  
    after save====================9ac4fb417acc4b06ad3a78a339d4f6d4
    ====================testEhcache
    [INFO][2016-04-28 18:23:39] com.jaeson.springstudy.dao.impl.JdbcTemplateStudentDaoImpl.deleteById(JdbcTemplateStudentDaoImpl.java:187) delete from student where id = ? 
    [INFO][2016-04-28 18:23:39] com.jaeson.springstudy.dao.impl.JdbcTemplateStudentDaoImpl.findById(JdbcTemplateStudentDaoImpl.java:89) select s.id as id, s.name as name, s.sex as sex, s.clazz_id as student_clazz_id,  c.id as clazz_id, c.name as clazz_name  from student s left outer join clazz c on s.clazz_id = c.id  where s.id = ? 
    after delete====================null

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    Spring+Ehcache集成

    然后,在Spring的主配置文件中,如`applicationContext.xml`,我们需要导入Ehcache的配置,并声明一个EhcacheManager: ```xml &lt;bean id="cacheManager" class="org.springframework.cache.ehcache....

    Spring 使用注解配置使用ehcache

    接着,我们需要创建一个Ehcache配置文件(ehcache.xml),定义缓存策略和缓存区域。例如: ```xml &lt;ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation=...

    spring整合ehCache

    这通常通过Maven或Gradle的配置文件完成,添加对应的EhCache和Spring支持EhCache的依赖库。例如,如果是Maven项目,可以在pom.xml文件中添加以下依赖: ```xml &lt;groupId&gt;net.sf.ehcache&lt;/groupId&gt; &lt;artifactId&gt;...

    spring+ehcache

    - 配置Spring:在Spring配置文件中启用缓存管理器,并指定使用Ehcache。 - 使用注解:在需要缓存的方法上添加`@Cacheable`、`@CacheEvict`等注解。 **二、Spring Cache注解** 1. **@Cacheable** 此注解用于标记...

    spring + ehcache + redis两级缓存

    1. **配置Ehcache**: 首先,我们需要在项目中添加Ehcache的依赖,并创建一个Ehcache配置文件,定义缓存的策略、大小限制等。在Spring中,可以通过`@EnableCaching`注解开启缓存支持,并通过`CacheManager`配置...

    Ehcache集成Spring的使用(转载)

    3. **配置 Spring**: 在 Spring 的配置文件中,如 `applicationContext.xml`,添加 Ehcache 的配置: ```xml &lt;bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"&gt; ...

    Struts2+Spring+Hibernate+Ehcache+AJAX+JQuery+Oracle 框架集成用户登录注册Demo工程

    1.通过google ehcache-spring-annotatios.jar自动注解方式实现整合Spring+Ehcache。 2.Action里通过struts2-spring-plugin.jar插件自动根据名字注入。 3.Ajax无刷新异步调用Struts2,返回Json数据,以用户注册为例。...

    Spring Boot 2.x基础教程:使用EhCache缓存集群.docx

    接下来,我们需要在Spring Boot的配置中引用这些自定义的EhCache配置文件。在`application.properties`或`application.yml`中,我们可以指定EhCache配置文件的位置,例如: ```properties spring.cache.type=...

    spring+ehcache demo

    3. **Ehcache配置文件** `ehcache.xml`是Ehcache的配置文件,用于定义缓存的名称、大小、过期策略等。例如: ```xml &lt;ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:...

    Spring4 整合EhCache实现 页面缓存 零配置

    在本文中,我们将深入探讨如何使用Spring4框架与EhCache进行整合,以实现零配置的页面缓存功能。EhCache是一个广泛使用的开源Java缓存解决方案,它提供了高效的内存和磁盘缓存机制,有助于提升应用程序性能。通过...

    spring+ehcache示例整合Demo

    Spring 和 Ehcache 是两个在Java开发中非常重要的框架。Spring 是一个全面的后端开发框架,提供了依赖注入、AOP(面向切面编程)、MVC(模型-视图-控制器)等特性,使得应用程序的构建变得更加简洁和模块化。Ehcache...

    Spring与ehcache结合使用

    -- Spring配置文件中配置ehcache --&gt; &lt;beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:cache=...

    ehcache配置使用详解

    ### ehcache配置使用详解 #### 一、ehcache概述与特性 **背景介绍:** 缓存作为提升系统响应速度和降低数据库压力的关键技术,在现代软件架构中占据着重要位置。ehcache,作为一款高性能的开源Java缓存框架,旨在...

    spring整合EhCache 的简单例子

    - 在Spring配置文件中引入EhCache配置: ```xml &lt;bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager"&gt; &lt;property name="cacheManager" ref="ehcache"/&gt; &lt;bean id="...

    spring ehcache

    1. **配置**:在 Spring 应用中,首先需要在配置文件中声明 Ehcache 的依赖,并设置相应的属性,例如缓存的大小、过期时间等。这可以通过 XML 配置或 Java 配置来完成。 2. **缓存注解**:Spring 提供了 `@...

    整合spring 和ehcache

    配置ehcache缓存,存储内存的设置,与spring 的整合等

    spring2.5整合ehcache2.0使用

    然后,在Spring的主配置文件(如`applicationContext.xml`)中,我们需要配置一个`CacheManager`,并指定Ehcache的配置文件位置: ```xml &lt;bean id="cacheManager" class="org.springframework.cache.ehcache....

    Ehcache 整合Spring 使用页面、对象缓存

    - **与Spring、Hibernate的集成**:Ehcache可以非常容易地与Spring和Hibernate框架集成,简化缓存的配置和使用。 #### 二、准备工作 在开始使用Ehcache之前,需要先完成以下准备工作: 1. **下载JAR包**: - **...

    spring整合EhCache 基于注解的方式

    本例子主要讲解ehcache的配置使用。采用了java配置和xml配置两种方式。主要用于学习。 使用java配置时将SpringTestCase.java 文件中的@ContextConfiguration(locations = { "classpath:applicationContext.xml" }) ...

    Ehcache(一): Spring + Ehcache开场白

    配置Ehcache,我们可以在Spring的配置文件中定义一个`CacheManager` bean,指定Ehcache的配置文件路径。Ehcache的配置文件(如ehcache.xml)包含了缓存的命名空间、大小限制、过期策略等信息。例如: ```xml ...

Global site tag (gtag.js) - Google Analytics