首页 > 代码库 > ehcache整合spring本地接口方式
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 @Override27 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 * @return43 */44 private Cache getCache() {45 return this.ehCacheCacheManager.getCache(this.cachename);46 }47 48 /**49 * 获取对象50 * 51 * @param key52 * 对象对应的key值53 * @return54 */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 key67 * @param value68 */69 public void put(Object key, Object value) {70 getCache().put(key, value);71 }72 73 /**74 * 如果key对应的缓存数据存在则删除75 * @param key76 */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 }
执行该文件即可。
ehcache整合spring本地接口方式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。