springmvc配置Ehcache实现缓存管理
来源:互联网 发布:mysql 数据库重命名 编辑:程序博客网 时间:2024/05/20 04:46
springmvc配置Ehcache实现缓存管理
项目源代码:http://download.csdn.net/detail/u013147600/9066943
工程介绍:
springmvc结合Ehcache实现缓存管理项目介绍:
通过在springmvc配置文件中配置oracle数据库连接信息实现JdbcTemplate连接数据库;
在dao和service层中实现查询用户信息方法;
添加Ehcache配置文件ehcache.xml,并在service.Impl中的类通过注释实现缓存管理(如: @Cacheable(value="myCache",key="'findByAccounterName'+#accountnumber"));
配置log日志管理,点击main.jsp中的链接,
1.第一次点击"ld信息"链接时,访问数据库日志打印为:@author lyx:-2015-08-31 10:36:51,681 [INFO] -[com.service.impl.UserServiceImpl] --------数据库中查到此用户号[liudong]对应的用户名为[liudong]
2.当再点击"ld信息"链接时,不会打印日志,这是因为第二次查询时不会访问数据库,直接从缓存中读取数据,所以不会打印数据库
3.点击"更新"链接后,打印日志为:@author lyx:-2015-08-31 10:37:05,594 [INFO] -[com.service.impl.UserServiceImpl] --------移除缓存中此用户号[liudong]对应的用户名[liudong]的缓存
4.当再点击"ld信息"链接时,打印日志:@author lyx:-2015-08-31 10:37:09,046 [INFO] -[com.service.impl.UserServiceImpl] --------数据库中查到此用户号[liudong]对应的用户名为[liudong]
5.点击"清空"链接时,打印日志为:@author lyx:-2015-08-31 10:37:12,112 [INFO] -[com.service.impl.UserServiceImpl] --------移除缓存中的所有数据!
6.点击"lyx信息"链接后打印日志:@author lyx:-2015-08-31 10:37:14,170 [INFO] -[com.service.impl.UserServiceImpl] --------数据库中查到此用户号[liuyuxin]对应的用户名为[liuyuxin]
7.点击"ld信息"链接,打印日志为:@author lyx:-2015-08-31 10:37:16,246 [INFO] -[com.service.impl.UserServiceImpl] --------数据库中查到此用户号[liudong]对应的用户名为[liudong]
Ehcache所需要的jar包:
ehcache-core-2.4.5.jar
ehcache-spring-annotations-1.2.0.jar
log日志需要的jar包:
slf4j-api-1.7.6.jar
slf4j-log4j12-1.7.6.jar
日志详细配置地址:http://blog.csdn.net/u013147600/article/details/47812811
ehcache.xml配置文件
- <!-- 1)最好在ehcache.xml中声明不进行updateCheck -->
- <!-- 2)为了配合BigMemory和Size Limit,原来的属性最好改名 -->
- <!-- maxElementsInMemory->maxEntriesLocalHeap -->
- <!-- maxElementsOnDisk->maxEntriesLocalDisk -->
- <!--
- name:Cache的唯一标识
- maxElementsInMemory:内存中最大缓存对象数
- maxElementsOnDisk:磁盘中最大缓存对象数,若是0表示无穷大
- eternal:Element是否永久有效,一但设置了,timeout将不起作用
- overflowToDisk:配置此属性,当内存中Element数量达到maxElementsInMemory时,Ehcache将会Element写到磁盘中
- timeToIdleSeconds:设置Element在失效前的允许闲置时间。仅当element不是永久有效时使用,可选属性,默认值是0,也就是可闲置时间无穷大
- timeToLiveSeconds:设置Element在失效前允许存活时间。最大时间介于创建时间和失效时间之间。仅当element不是永久有效时使用,默认是0.,也就是element存活时间无穷大
- diskPersistent:是否缓存虚拟机重启期数据
- diskExpiryThreadIntervalSeconds:磁盘失效线程运行时间间隔,默认是120秒
- diskSpoolBufferSizeMB:这个参数设置DiskStore(磁盘缓存)的缓存区大小。默认是30MB。每个Cache都应该有自己的一个缓冲区
- memoryStoreEvictionPolicy:当达到maxElementsInMemory限制时,Ehcache将会根据指定的策略去清理内存。默认策略是LRU(最近最少使用)。你可以设置为FIFO(先进先出)或是LFU(较少使用)
- -->
-
- <ehcache name="lyxCache">
-
- <defaultCache
- maxElementsInMemory="1000"
- eternal="false"
- timeToIdleSeconds="120"
- timeToLiveSeconds="120"
- overflowToDisk="false"/>
-
- <cache name="myCache"
- maxElementsOnDisk="20000"
- maxElementsInMemory="2000"
- eternal="true"
- overflowToDisk="true"
- diskPersistent="true"/>
- </ehcache>
springmvc-servlet.xml (springmvc的配置文件)
- package com.service;
-
- import java.util.List;
- import java.util.Map;
- import com.entity.MemberUser;
-
-
-
-
-
-
-
-
-
- public interface UserService {
-
- public List<Map<String,Object>> queryAllInfo(int currentPage,int limitPage);
-
- public int totalCount();
-
- public List<Map<String, Object>> findByAccounterName(String accountnumber);
-
- public void update(String accountnumber);
-
- public void removeAll();
- }
UserServiceImpl.java
- package com.service.impl;
-
- import java.util.List;
- import java.util.Map;
-
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.cache.annotation.CacheEvict;
- import org.springframework.cache.annotation.Cacheable;
- import org.springframework.stereotype.Service;
-
- import com.dao.UserDao;
- import com.dao.Impl.UserDaoImpl;
- import com.entity.MemberUser;
-
- import com.service.UserService;
-
-
-
-
-
-
-
-
-
-
- @Service("UserService")
- public class UserServiceImpl implements UserService{
-
- @Autowired
- private UserDao dao;
-
- private static final Logger logger = LoggerFactory.getLogger(UserServiceImpl.class);
-
- public List<Map<String, Object>> queryAllInfo(int currentPage,int limitPage) {
-
-
- return dao.queryAllInfo( currentPage, limitPage);
- }
-
- public int totalCount() {
-
- return dao.totalCount();
- }
-
-
-
- @Cacheable(value="myCache",key="'findByAccounterName'+#accountnumber")
- public List<Map<String, Object>> findByAccounterName(String accountnumber) {
-
- System.out.println("数据库中查到此用户号[" + accountnumber + "]对应的用户名为[" +accountnumber + "]");
-
- logger.info("-------数据库中查到此用户号[" + accountnumber + "]对应的用户名为[" +accountnumber + "]");
- return dao.findByAccounterName(accountnumber);
- }
-
- @CacheEvict(value="myCache",key="'findByAccounterName'+#accountnumber")
- public void update(String accountnumber)
- {
- System.out.println("移除缓存中此用户号[" + accountnumber + "]对应的用户名[" + accountnumber+ "]的缓存");
- logger.info("-------移除缓存中此用户号[" + accountnumber + "]对应的用户名[" + accountnumber+ "]的缓存");
- }
-
-
- @CacheEvict(value="myCache",allEntries=true)
- public void removeAll()
- {
- System.out.println("移除缓存中的所有数据!");
- logger.info("-------移除缓存中的所有数据!");
- }
- }
UserController.java中方法:
- @Controller
- @RequestMapping("/user")
- public class UserController {
-
- @RequestMapping("/queryUserInfoByUsername")
- public String queryUserInfoByUsername(HttpServletRequest request)
- {
- String username = request.getParameter("username");
-
- List<Map<String, Object>> userlist = new ArrayList<Map<String,Object>>();
- MemberUser user =new MemberUser();
-
- if(username!=null)
- {
- userlist = service.findByAccounterName(username);
-
- for (Map<String, Object> map : userlist) {
- for (String key : map.keySet()) {
-
- user.setAccountNumber(map.get("ACCOUNTNUMBER").toString());
- user.setMemberName(map.get("MEMBERNAME").toString());
- System.out.print(key+":"+map.get(key));
- }
- }
- if(user!=null)
- {
- request.setAttribute("memberUser", user);
-
- return "/myInfo";
- }
- }
-
- return null;
- }
-
-
- @RequestMapping(value="/update",method=RequestMethod.GET)
- public String update(HttpServletRequest request)
- {
- String username = request.getParameter("username");
- service.update(username);
- request.setAttribute("accounterNumber", username);
-
- return "/update";
- }
-
- @RequestMapping(value="/removeAll",method=RequestMethod.GET)
- public String removeAll()
- {
- service.removeAll();
- return "/removeAll";
- }
- }
main.jsp
- <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
- <%
- String path = request.getContextPath();
- String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
- request.setAttribute("home", path);
- %>
-
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html>
- <head>
- <base href="<%=basePath%>">
-
- <title>main</title>
-
- <link rel="stylesheet" href="${home}/res/css/bootstrap.min.css" type="text/css"></link>
- <link rel="stylesheet" href="${home}/res/css/allStyle.css" type="text/css"></link>
-
- <style type="text/css">
-
- .userTable{
-
- font-size: 20px;
- }
- </style>
-
- <script type="text/javascript">
- var home ="${home}";
- </script>
- </head>
-
- <body>
-
- <div>
- <h2 class="sub-header">管理列表</h2>
- <ul>
- <li> <a href="${home}/user/queryUserInfoByUsername?username=liuyuxin" target="_blank">lyx信息</a></li>
- <li> <a href="${home}/user/queryUserInfoByUsername?username=liudong" target="_blank">ld信息</a></li>
- <li> <a href="${home}/user/update?username=liudong" target="_blank">更新</a></li>
- <li> <a href="${home}/user/removeAll" target="_blank">清空</a></li>
- <li> <a href="${home}/index.jsp" target="_blank">全部信息</a></li>
- </ul>
- </div>
-
- <script type="text/javascript" src="${home}/res/js/jquery-1.11.3.min.js"></script>
-
- </body>
- </html>
图片:
console控制台日志:
- @author lyxx:-2015-08-31 10:36:51,681 [INFO] -[com.service.impl.UserServiceImpl] --------数据库中查到此用户号[liudong]对应的用户名为[liudong]
-
- @author lyxx:-2015-08-31 10:37:05,594 [INFO] -[com.service.impl.UserServiceImpl] --------移除缓存中此用户号[liudong]对应的用户名[liudong]的缓存
-
- @author lyxx:-2015-08-31 10:37:09,046 [INFO] -[com.service.impl.UserServiceImpl] --------数据库中查到此用户号[liudong]对应的用户名为[liudong]
-
- @author lyxx:-2015-08-31 10:37:12,112 [INFO] -[com.service.impl.UserServiceImpl] --------移除缓存中的所有数据!
- 数据库中查到此用户号[liuyuxin]对应的用户名为[liuyuxin]
- @author lyxx:-2015-08-31 10:37:14,170 [INFO] -[com.service.impl.UserServiceImpl] --------数据库中查到此用户号[liuyuxin]对应的用户名为[liuyuxin]
-
- @author lyxx:-2015-08-31 10:37:16,246 [INFO] -[com.service.impl.UserServiceImpl] --------数据库中查到此用户号[liudong]对应的用户名为[liudong]
文件打印日志:
- 2015-08-31 10:36:45 [ http-apr-8080-exec-8:26719 ] - [ INFO ] Loaded JDBC driver: oracle.jdbc.driver.OracleDriver
- 2015-08-31 10:36:51 [ http-apr-8080-exec-3:33050 ] - [ INFO ] -------数据库中查到此用户号[liudong]对应的用户名为[liudong]
- 2015-08-31 10:37:05 [ http-apr-8080-exec-8:46963 ] - [ INFO ] -------移除缓存中此用户号[liudong]对应的用户名[liudong]的缓存
- 2015-08-31 10:37:09 [ http-apr-8080-exec-3:50415 ] - [ INFO ] -------数据库中查到此用户号[liudong]对应的用户名为[liudong]
- 2015-08-31 10:37:12 [ http-apr-8080-exec-4:53481 ] - [ INFO ] -------移除缓存中的所有数据!
- 2015-08-31 10:37:14 [ http-apr-8080-exec-7:55539 ] - [ INFO ] -------数据库中查到此用户号[liuyuxin]对应的用户名为[liuyuxin]
- 2015-08-31 10:37:16 [ http-apr-8080-exec-8:57615 ] - [ INFO ] -------数据库中查到此用户号[liudong]对应的用户名为[liudong]
参考网址:http://blog.csdn.net/jadyer/article/details/12257865