ehcache整合spring本地接口方式

一、简介

  ehcache整合spring,可以通过使用echache的本地接口,从而达到定制的目的。在方法中根据业务逻辑进行判断,从缓存中获取数据或将数据保存到缓存。这样让程序变得更加灵活。

  本例子使用maven构建,需要的依赖如下:

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>3.2.6.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>net.sf.ehcache</groupId>
            <artifactId>ehcache-core</artifactId>
            <version>2.4.2</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>3.2.6.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>3.2.6.RELEASE</version>
        </dependency>

二、示例代码

  ehcache.xml代码如下:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 3     xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"
 4     updateCheck="false">
 5
 6     <!-- 默认缓存配置 ,缓存名称为 default -->
 7     <defaultCache maxElementsInMemory="50" eternal="false"
 8         overflowToDisk="false" memoryStoreEvictionPolicy="LFU" />
 9     <!-- 自定义缓存,名称为lt.ehcache -->
10     <cache name="lt.ecache" maxElementsInMemory="50" eternal="false"
11         overflowToDisk="false" memoryStoreEvictionPolicy="LFU" />
12 </ehcache>  

  spring-config-ehcache-custom.xml代码如下:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
 4     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
 5 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
 6
 7
 8     <context:annotation-config />
 9     <context:component-scan base-package="com.ehcache.custom" /> <!-- 注解扫描路径 -->
10
11     <bean id="cacheService" class="com.ehcache.custom.CacheService">
12         <property name="cachename" value="lt.ecache"></property> <!-- ehcache.xml中配置的缓存名称 -->
13         <property name="ehCacheCacheManager" ref="ehCacheCacheManager"></property>
14     </bean>
15
16     <bean id="ehCacheCacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager">
17         <property name="cacheManager" ref="ehcache" />
18     </bean>
19
20     <bean id="ehcache"
21         class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
22         <property name="configLocation" value="classpath:ehcache.xml" />
23     </bean>
24
25 </beans>

  ehcache.xml与spring-config-ehcache-custom.xml存放在系统类路径src目录下。

  实体Employee.java如下

 1 package com.ehcache.custom;
 2
 3 import java.io.Serializable;
 4
 5 public class Employee implements Serializable {
 6     private static final long serialVersionUID = -4341595236940308296L;
 7     private int id;
 8     private String name;
 9     private String designation;
10
11     public Employee(int id, String name, String designation) {
12         super();
13         this.id = id;
14         this.name = name;
15         this.designation = designation;
16     }
17
18     public int getId() {
19         return id;
20     }
21
22     public void setId(int id) {
23         this.id = id;
24     }
25
26     @Override
27     public String toString() {
28         return "Employee [id=" + id + ", name=" + name + ", designation="
29                 + designation + "]";
30     }
31
32     public String getName() {
33         return name;
34     }
35
36     public void setName(String name) {
37         this.name = name;
38     }
39
40     public String getDesignation() {
41         return designation;
42     }
43
44     public void setDesignation(String designation) {
45         this.designation = designation;
46     }
47 }

  EmployeeDAO.java代码如下

package com.ehcache.custom;

import java.util.ArrayList;
import java.util.List;

import javax.annotation.Resource;

import org.springframework.cache.ehcache.EhCacheCacheManager;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;

@Component("employeeDAO")
public class EmployeeDAO {

    @Resource
    private CacheService cacheService;

    private String listKey = "employeeList";

    /**
     * 获取对象列表
     *
     * @return
     */
    public List<Employee> getEmployees() {
        // 从缓存中获取
        List<Employee> list = (List<Employee>) cacheService.get(listKey);
        if (CollectionUtils.isEmpty(list)) { // 缓存中没有数据
            System.out.println("*** 缓存中没有数据 已经调用   ***");
            list = new ArrayList<Employee>(5);
            list.add(new Employee(1, "Ben", "Architect"));
            list.add(new Employee(2, "Harley", "Programmer"));
            list.add(new Employee(3, "Peter", "BusinessAnalyst"));
            list.add(new Employee(4, "Sasi", "Manager"));
            list.add(new Employee(5, "Abhi", "Designer"));
            this.cacheService.put(listKey, list);// 存放在缓存
        }else{
            System.out.println("*** 缓存中数据 已经存在   ***");
        }
        return list;
    }

    /**
     * 获取指定的对象
     *
     * @param id
     *            对象id
     * @param employees
     * @return
     */
    public Employee getEmployee(int id, List<Employee> employees) {
        // 从缓存中获取
        Employee emp = (com.ehcache.custom.Employee) cacheService.get(id);
        if (emp == null) {// 缓存中对象不存在
            System.out.println("***  缓存中对象不存在: " + id + " ***");
            for (Employee employee : employees) {
                if (employee.getId() == id) {
                    emp = employee;
                }
            }
            this.cacheService.put(id, emp);// 保存到缓存
        }else{
            System.out.println("***  缓存中对象存在: " + id + " ***");
        }
        return emp;
    }

    /**
     * 更新对象
     *
     * @param id
     *            对象id
     * @param designation
     * @param employees
     *
     */
    public void updateEmployee(int id, String designation,
            List<Employee> employees) {
        for (Employee employee : employees) {
            if (employee.getId() == id) {
                employee.setDesignation(designation);
                this.cacheService.put(id, employee);// 保存更新后的对象到缓存
            }
        }
    }

    /**
     * 添加对象
     *
     * @param employee
     *            要添加的对象
     * @param employees
     *
     */
    public void addEmployee(Employee employee, List<Employee> employees) {
        employees.add(employee);
        this.cacheService.put(employee.getId(), employee);// 保存更新后的对象到缓存
    }

    /**
     * 删除对象
     *
     * @param id
     *            Employee对象id
     * @param employees
     * @return
     */
    public void removeEmployee(int id, List<Employee> employees) {
        int i = 0;
        for (Employee employee : employees) {
            if (employee.getId() != id) {
                i++;
            } else {
                break;
            }
        }
        this.cacheService.evict(id);// 删除缓存中的数据
        employees.remove(i);
    }

    /**
     * 删除多个对象
     *
     * @param employees
     * @return
     */
    public List<Employee> removeAllEmployee(List<Employee> employees) {
        System.out.println("*** removeAllEmployee()  :  ***");
        employees.clear();
        System.out.println(employees.size());
        this.cacheService.evict(listKey);// 删除缓存中的数据
        return employees;
    }

}

  CacheService.java代码如下:

 1 package com.ehcache.custom;
 2
 3 import org.springframework.cache.Cache;
 4 import org.springframework.cache.Cache.ValueWrapper;
 5 import org.springframework.cache.ehcache.EhCacheCacheManager;
 6
 7 /**
 8  * 封装springcache
 9  *
10  */
11 public class CacheService {
12
13     /**
14      * 缓存管理对象
15      */
16     private EhCacheCacheManager ehCacheCacheManager;
17
18     /**
19      * 缓存名称
20      */
21     private String cachename;
22
23     public EhCacheCacheManager getEhCacheCacheManager() {
24         return ehCacheCacheManager;
25     }
26
27     public void setEhCacheCacheManager(EhCacheCacheManager ehCacheCacheManager) {
28         this.ehCacheCacheManager = ehCacheCacheManager;
29     }
30
31     public String getCachename() {
32         return cachename;
33     }
34
35     public void setCachename(String cachename) {
36         this.cachename = cachename;
37     }
38
39     /**
40      * 获取进行操作的Cache对象
41      *
42      * @return
43      */
44     private Cache getCache() {
45         return this.ehCacheCacheManager.getCache(this.cachename);
46     }
47
48     /**
49      * 获取对象
50      *
51      * @param key
52      *            对象对应的key值
53      * @return
54      */
55     public Object get(Object key) {
56         ValueWrapper valueWrapper = getCache().get(key);
57         if (valueWrapper != null) {
58             return getCache().get(key).get();
59         }
60         return valueWrapper;
61     }
62
63     /**
64      * 缓存对象
65      *
66      * @param key
67      * @param value
68      */
69     public void put(Object key, Object value) {
70         getCache().put(key, value);
71     }
72
73     /**
74      * 如果key对应的缓存数据存在则删除
75      * @param key
76      */
77     public void evict(Object key){
78         getCache().evict(key);
79     }
80
81
82     /**
83      * 该方法获取的就是 net.sf.ehcache.Cache对象
84      *
85      * @return  net.sf.ehcache.Cache对象
86      */
87     public Object getNativeCache() {
88         return getCache().getNativeCache();
89     }
90
91 }

  该类主要是对spring中的ehcache进行封装。

  Main.java代码如下:

 1 package com.ehcache.custom;
 2
 3 import java.util.List;
 4
 5 import org.springframework.context.ApplicationContext;
 6 import org.springframework.context.support.ClassPathXmlApplicationContext;
 7
 8 public class Main {
 9
10     public static void main(String[] args) {
11
12         ApplicationContext context = new ClassPathXmlApplicationContext(
13                 "spring-config-ehcache-custom.xml");
14
15         EmployeeDAO dao = (EmployeeDAO) context.getBean("employeeDAO");
16
17         System.out.println("-----------------------第1次调用----------------------------");
18         List<Employee> employees = dao.getEmployees();
19         System.out.println(employees.toString());
20
21         System.out.println("------------------------第2次调用---------------------------");
22         employees = dao.getEmployees();
23         System.out.println(employees.toString());
24
25         System.out.println("------------------------第3次调用---------------------------");
26         employees = dao.getEmployees();
27         System.out.println(employees.toString());
28
29
30          System.out.println("------------------------- 获取对象--------------------------");
31          System.out.println("-------------------------第1次调用--------------------------");
32          Employee employee = dao.getEmployee(1, employees);
33          System.out.println(employee.toString());
34          System.out.println("-------------------------第2次调用--------------------------");
35          employee = dao.getEmployee(1, employees);
36          System.out.println(employee.toString());
37
38
39          System.out.println("------------------------- 对象更新--------------------------");
40          dao.updateEmployee(1, "已经更新的对象", employees);
41          System.out.println("-------------------------第1次调用--------------------------");
42          employee = dao.getEmployee(1, employees);
43          System.out.println(employee.toString());
44          System.out.println("-------------------------第2次调用--------------------------");
45          employee = dao.getEmployee(1, employees);
46          System.out.println(employee.toString());
47
48
49          System.out.println("------------------------- 添加对象--------------------------");
50          dao.addEmployee(new Employee(6, "555", "Designer5555"),employees);
51          System.out.println("-------------------------第1次调用--------------------------");
52          employee = dao.getEmployee(6, employees);
53          System.out.println(employee);
54          System.out.println("-------------------------第2次调用--------------------------");
55          employee = dao.getEmployee(6, employees);
56          System.out.println(employee.toString());
57
58
59          System.out.println("------------------------- 清除一个对象--------------------------");
60          dao.removeEmployee(2, employees);
61          System.out.println("-------------------------第1次调用--------------------------");
62          employees = dao.getEmployees();
63          System.out.println(employees);
64          System.out.println("-------------------------第2次调用--------------------------");
65          employees = dao.getEmployees();
66          System.out.println(employees);
67
68
69          System.out.println("------------------------- 清除所有--------------------------");
70          System.out.println(employees.size());
71          employees = dao.removeAllEmployee(employees);
72          System.out.println("-------------------------第1次调用--------------------------");
73          employees = dao.getEmployees();
74          System.out.println(employees);
75          System.out.println("-------------------------第2次调用--------------------------");
76          employees = dao.getEmployees();
77          System.out.println(employees);
78     }
79 }

  执行该文件即可。

时间: 2024-10-17 03:13:43

ehcache整合spring本地接口方式的相关文章

ehcache整合spring注解方式

一.简介 在hibernate中就是用到了ehcache 充当缓存.spring对ehcache也提供了支持,使用也比较简单,只需在spring的配置文件中将ehcache的ehcache.xml文件配置进去即可.在spring中使用ehcache有两种方式,一种是使用spring提供的封装,使用注解的方式配置在某个方法上面,第一次调用该方法的时候,将该方法执行返回的数据缓存,当再次执行的时候如果时间没有变,就直接冲缓存获取,该方法不执行:另一种方式是获取到ehcache本地接口,直接使用ehc

Ehcache 整合Spring 使用页面、对象缓存(转载)

Ehcache在很多项目中都出现过,用法也比较简单.一般的加些配置就可以了,而且Ehcache可以对页面.对象.数据进行缓存,同时支持集群/分布式缓存.如果整合Spring.Hibernate也非常的简单,Spring对Ehcache的支持也非常好.EHCache支持内存和磁盘的缓存,支持LRU.LFU和FIFO多种淘汰算法,支持分布式的Cache,可以作为Hibernate的缓存插件.同时它也能提供基于Filter的Cache,该Filter可以缓存响应的内容并采用Gzip压缩提高响应速度.

Ehcache 整合Spring 使用

本文参考:http://www.cnblogs.com/hoojo/archive/2012/07/12/2587556.html Ehcache可以对页面.对象.数据进行缓存,同时支持集群/分布式缓存.如果整合Spring.Hibernate也非常的简单,Spring对Ehcache的支持也非常好.EHCache支持内存和磁盘的缓存,支持LRU.LFU和FIFO多种淘汰算法,支持分布式的Cache,可以作为Hibernate的缓存插件.同时它也能提供基于Filter的Cache,该Filter

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

Ehcache在很多项目中都出现过,用法也比较简单.一般的加些配置就可以了,而且Ehcache可以对页面.对象.数据进行缓存,同时支持集群/分布式缓存.如果整合Spring.Hibernate也非常的简单,Spring对Ehcache的支持也非常好.EHCache支持内存和磁盘的缓存,支持LRU.LFU和FIFO多种淘汰算法,支持分布式的Cache,可以作为Hibernate的缓存插件.同时它也能提供基于Filter的Cache,该Filter可以缓存响应的内容并采用Gzip压缩提高响应速度.

Ehcache整合spring

下面介绍一下简单使用的配置过程:ehcache.jar及spring相关jar就不说了,加到项目中就是了. 简单的使用真的很简单.但只能做为入门级了. 1.ehcache.xml,可放classpath根目录下, <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="ehcache.xsd" updateCheck="

spring + ehcache 整合

一:ehcache 简介 ehCache 是一个纯Java的进程内缓存框架,具有快速.精干等特点,是Hibernate中默认的CacheProvider 类似于做了数据库的一个备份,一定要注意使用ehcache时的数据脏读 二:spring 需要的知识点 1 spring AOP 应用的几种方式:ProxyFactoryBean 动态代理,2.0版本之前:<aop> 标签 2.0版本之后 2 spring 获取接入点信息:JoinPoint 和 ProceedingJoinPoint(限于环绕

Mybatis整合Spring 【转】

根据官方的说法,在ibatis3,也就是Mybatis3问世之前,Spring3的开发工作就已经完成了,所以Spring3中还是没有对Mybatis3的支持.因此由Mybatis社区自己开发了一个Mybatis-Spring用来满足Mybatis用户整合Spring的需求.下面就将通过Mybatis-Spring来整合Mybatis跟Spring的用法做一个简单的介绍. MapperFactoryBean 首先,我们需要从Mybatis官网上下载Mybatis-Spring的jar包添加到我们项

整合spring,springmvc和mybatis

我创建的是maven项目,使用到的依赖架包有下面这些: <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>4.1.2.RELEASE</version> </dependency> <dependency> <

【Java EE 学习第81天】【CXF框架】【CXF整合Spring】

一.CXF简介 CXF是Apache公司下的项目,CXF=Celtix+Xfire:它支持soap1.1.soap1.2,而且能够和spring进行快速无缝整合. 另外jax-ws是Sun公司发布的一套开发WebService服务的标准.早期的标准如jax-rpc已经很少使用,而cxf就是在新标准jax-ws下开发出来的WebService,jax-ws也内置到了jdk1.6当中. CXF官方下载地址:http://cxf.apache.org/download.html 下载完成之后,解压开压