- 浏览: 219344 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (397)
- j2se (28)
- nio (3)
- 易错点 (3)
- 面试ssh (9)
- ssh整合 (11)
- jbpm+spring (2)
- js (15)
- 高级技术 (59)
- swing (3)
- 数据库 (16)
- hibernate (18)
- spring (19)
- 开发网站知识点 (9)
- jbpm (4)
- json (5)
- 设计模式 (22)
- 自定义标签 (1)
- j2ee (9)
- lucene (3)
- cahce (11)
- maven (5)
- html5 (1)
- 多数据源 (10)
- 页面聊天 (9)
- 富客户端 (1)
- android (13)
- aop+拦截器+jms (13)
- 框架整合 (1)
- 非阻塞io (24)
- 暂时不看 (13)
- webservice (3)
- oracle (3)
- 算法 (4)
- 协程 (2)
- netty (1)
- 爬虫 (0)
- 高级基础 (1)
- JVM调优总结 (12)
- 知识点技巧 (1)
- REST (0)
- 基础 io (2)
- dubbo (8)
- 线程 (1)
- spring源码 (2)
- git (1)
- office (2)
最新评论
-
sjzcmlt:
,写的挺好的啊
一个完整的负载均衡的例子 . -
他大姨妈:
网上大部分例子都是直接通过IdleStateHandler来实 ...
Netty的超时机制 心跳机制
最近项目有一个需求,就是用户在查询界面,输入很多查询条件之后,查询出了需要的信息,然后点击查看详细之后,希望查询列表页面时还能保存上一次的查询条件。经过同事之间的简单讨论之后,确定了实现方案。
用spring的拦截器,拦截到用户的所有list.do请求,保存下list.do,把里面的request.paramaterMap转换成字符串(注意中文转码),以ip+username+功能模块url为key,保存下来,用户在详细信息页面点击返回时,返回连接需要带goback参数,拦截器监测到请求参数里包含goback时,就用ip+username+功能模块url把保存的值拿出来,之后response.sendRedirect(request.getRequestURL()+str)。
上面只是大体实现的概括,下面看代码。
定义spring拦截器,项目的spring版本是2.5的,不支持mvc:interceptors标签定义拦截器。
Html代码
1.<util:list id="interceptors">
2. <bean class="mon.cache.SearchCacheInterceptor"/>
3.</util:list>
4.
5.<!-- 定义注解URL映射处理器 -->
6.<bean id="urlMapping"
7. class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
8. <property name="interceptors" ref="interceptors" />
9. <property name="order" value="1"></property>
10.</bean>
使用的是DefaultAnnotationHandlerMapping这个spring默认的基于注解的请求拦截器类。
ehcache用的是1.72版本,配置文件ehcache.xml为:
Html代码
1.<?xml version="1.0" encoding="UTF-8"?>
2.<ehcache xmlns:xsi="-instance"
3. xsi:noNamespaceSchemaLocation="ehcache.xsd" updateCheck="true"
4. monitoring="autodetect">
5. <diskStore path="F:/appstore/ehcache"/>
6. <defaultCache
7. maxElementsInMemory="10000"
8. eternal="false"
9. timeToIdleSeconds="1800"
10. timeToLiveSeconds="1800"
11. overflowToDisk="true"
12. maxElementsOnDisk="10000000"
13. diskPersistent="false"
14. diskExpiryThreadIntervalSeconds="120"
15. memoryStoreEvictionPolicy="LRU"
16. />
17. <cache name="UrlCache"
18. maxElementsInMemory="8000"
19. maxElementsOnDisk="10000000"
20. eternal="false"
21. overflowToDisk="true"
22. diskSpoolBufferSizeMB="20"
23. memoryStoreEvictionPolicy="LFU"
24. />
25.</ehcache>
并且对ehcache进行了简单封装(不是我封装的):
Java代码
1.package mon.cache;
2.
3.import .URL;
4.import java.util.HashMap;
5.import java.util.Map;
6.
7.import net.sf.ehcache.Cache;
8.import net.sf.ehcache.CacheManager;
9.import net.sf.ehcache.Element;
10.
11./**
12. * cache管理器
13. *
14. * @author HANQUNFENG
15. *
16. */
17.public class CacheStore {
18. private static CacheManager manager;
19. private static Cache cache;
20. static {
21. CacheStore cs = new CacheStore();
22. cs.init();
23. }
24.
25. /**
26. * 初试化cache
27. */
28. private void init() {
29. URL url = getClass()。getResource("/config/context/ehcache.xml");
30. manager = new CacheManager(url);
31. cache = manager.getCache("UrlCache");
32. }
33.
34. /**
35. * 清除cache
36. */
37. @SuppressWarnings("unused")
38. private void destory() {
39. manager.shutdown();
40. }
41.
42. /**
43. * 得到某个key的cache值
44. *
45. * @param key
46. * @return
47. */
48. public static Element get(String key) {
49. return cache.get(key);
50. }
51.
52. /**
53. * 清楚key的cache
54. *
55. * @param key
56. */
57. public static void remove(String key) {
58. cache.remove(key);
59. }
60.
61. /**
62. * 设置或更新某个cache值
63. *
64. * @param element
65. */
66. public static void put(Element element) {
67. cache.put(element);
68. }
69.
70. public static void removeAll(){
71. cache.removeAll();
72. }
73.
74.
75.
76. public static void main(String[] args) {
77. Map m = new HashMap();
78. m.put("1", "1");
79. m.put("2", "2");
80. m.put("3", "3");
81. Map m1 = new HashMap();
82. m1.put("11", "11");
83. m1.put("21", "21");
84. m1.put("31", "31");
85. CacheStore.remove("1");
86. System.out.println(CacheStore.get("1"));
87. System.out.println(CacheStore.get("2"));
88. System.out.println(CacheStore.get("2"));
89. CacheStore.removeAll();
90. System.out.println(CacheStore.get("2"));
91. System.out.println(CacheStore.get("3"));
92. System.out.println("------end-----");
93. }
94.}
下载ehcache.jar
拦截器代码:
Java代码
1.package mon.cache;
2.
3.import java.io.UnsupportedEncodingException;
4.import java.util.Arrays;
5.import java.util.Map;
6.
7.import javax.servlet.http.HttpServletRequest;
8.import javax.servlet.http.HttpServletResponse;
9.
10.import net.sf.ehcache.Element;
11.
12.import org.apache.log4j.Logger;
13.import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
14.
15.import mon.util.AuthenticationUtils;
16.
17./**
18. * 查询条件缓存的拦截器
19. *
20. * @author KingViker
21. *
22. */
23.public class SearchCacheInterceptor extends HandlerInterceptorAdapter
24.{
25. private static final Logger logger = Logger
26. .getLogger(SearchCacheInterceptor.class);
27.
28. @SuppressWarnings("unchecked")
29. @Override
30. public boolean preHandle(HttpServletRequest request,
31. HttpServletResponse response, Object handler)throws Exception {
32. ("记录查询参数拦截器******begin");
33. String url = request.getServletPath();
34. String ip = request.getRemoteAddr();
35. Map<String, String[]> paramsMap = request.getParameterMap();
36. String userName = AuthenticationUtils.getUsername();
37. if (url.indexOf("list.do") != -1) {
38. if (paramsMap.get("goBack") != null) {
39. Element e = CacheStore.get(ip
40. + userName + url);
41. if (e != null) {
42. ("取出缓存的查询参数,重定向连接");
43. response.sendRedirect(request.getRequestURL()+(String)e.getValue());
44. return false;
45. }
46. } else {
47. ("更新查询参数");
48. CacheStore.put(new Element(ip+ userName + url, changeMapToString(paramsMap)));
49. }
50. }
51. ("记录查询参数拦截器******begin");
52. return true;
53. }
54.
55. private String changeMapToString(Map<String, String[]> paramsMap) {
56. StringBuffer url = new StringBuffer();
57. url.append("?");
58. for(Map.Entry<String, String[]> entry :paramsMap.entrySet()){
59. String key = entry.getKey();
60. String [] value = entry.getValue();
61. url.append(key+"="+encodeUrl(Arrays.toString(value)));
62. url.append("&");
63. }
64. System.out.println(url);
65. return url.toString();
66. }
67. private String encodeUrl(String value) {
68. String result = "";
69. result = value.replaceAll("\\[", "")。replaceAll("\\]", "");
70. try {
71. byte temp[]=result.getBytes("UTF-8");
72. result=new String(temp,"ISO-8859-1");
73. } catch (UnsupportedEncodingException e) {
74. e.printStackTrace();
75. }
76. return result;
77. }
78.}
拦截器类继承自HandlerInterceptorAdapter,重写了prehandle方法。prehandle是在请求前执行,还可以重写afterCompletion和postHandle两个方法,分别是请求后和请求前后执行。
我的拦截器的代码原先的逻辑不是这样。我原先的逻辑是利用反射直接更改request的parameterMap保存的值,不需要其他的操作很简单,也不需要重定向。但是这个思路有两个问题:
1.我用ehcache保存时直接保存的是parameterMap的引用,每次请求过来之后spring都会清空并且重新初始化这个map,导致ehcache未能缓存到真正的数据。
2.在测试时发现,spring框架从请求接受参数后并且封装到了bean里面之后请求才能拦截到,也就是说我更改了parameterMap的值,controller收到的请求还是未更改的数据。
所以我改变了思路,把每次请求的parameterMap对象封装成字符串然后在缓存,需要使用缓存时,直接取出并重定向sendredirectt.
但是sendreditect是get方式的请求,浏览器一般会把请求连接中的中文参数进行转码,转成ISO-8859-1,产生了乱码问题,所以需要在链接后面拼接参数时需要对中文转码。这也就是上面的encodeUrl函数的作用。
写这篇文章的目的只是介绍一下实现思路和用到的一些现有框架,以及其中遇到的一些问题。给一些需要实现类似功能的道友一个实现思路而已。这里不提供源码,我个人是很不喜欢伸手党的。就是因为编程界有太多的伸手党,导致了很多人能做一些项目,但是出现问题就不知道怎么改,或者明明性能上只需要1各单位,偏偏不知所以然的用了10各单位来实现功能。我个人提倡,用框架的时候多想想实现,别一味的用,要不然用到老,还是在用别人的框架,永远写不出自己的框架。
用spring的拦截器,拦截到用户的所有list.do请求,保存下list.do,把里面的request.paramaterMap转换成字符串(注意中文转码),以ip+username+功能模块url为key,保存下来,用户在详细信息页面点击返回时,返回连接需要带goback参数,拦截器监测到请求参数里包含goback时,就用ip+username+功能模块url把保存的值拿出来,之后response.sendRedirect(request.getRequestURL()+str)。
上面只是大体实现的概括,下面看代码。
定义spring拦截器,项目的spring版本是2.5的,不支持mvc:interceptors标签定义拦截器。
Html代码
1.<util:list id="interceptors">
2. <bean class="mon.cache.SearchCacheInterceptor"/>
3.</util:list>
4.
5.<!-- 定义注解URL映射处理器 -->
6.<bean id="urlMapping"
7. class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
8. <property name="interceptors" ref="interceptors" />
9. <property name="order" value="1"></property>
10.</bean>
使用的是DefaultAnnotationHandlerMapping这个spring默认的基于注解的请求拦截器类。
ehcache用的是1.72版本,配置文件ehcache.xml为:
Html代码
1.<?xml version="1.0" encoding="UTF-8"?>
2.<ehcache xmlns:xsi="-instance"
3. xsi:noNamespaceSchemaLocation="ehcache.xsd" updateCheck="true"
4. monitoring="autodetect">
5. <diskStore path="F:/appstore/ehcache"/>
6. <defaultCache
7. maxElementsInMemory="10000"
8. eternal="false"
9. timeToIdleSeconds="1800"
10. timeToLiveSeconds="1800"
11. overflowToDisk="true"
12. maxElementsOnDisk="10000000"
13. diskPersistent="false"
14. diskExpiryThreadIntervalSeconds="120"
15. memoryStoreEvictionPolicy="LRU"
16. />
17. <cache name="UrlCache"
18. maxElementsInMemory="8000"
19. maxElementsOnDisk="10000000"
20. eternal="false"
21. overflowToDisk="true"
22. diskSpoolBufferSizeMB="20"
23. memoryStoreEvictionPolicy="LFU"
24. />
25.</ehcache>
并且对ehcache进行了简单封装(不是我封装的):
Java代码
1.package mon.cache;
2.
3.import .URL;
4.import java.util.HashMap;
5.import java.util.Map;
6.
7.import net.sf.ehcache.Cache;
8.import net.sf.ehcache.CacheManager;
9.import net.sf.ehcache.Element;
10.
11./**
12. * cache管理器
13. *
14. * @author HANQUNFENG
15. *
16. */
17.public class CacheStore {
18. private static CacheManager manager;
19. private static Cache cache;
20. static {
21. CacheStore cs = new CacheStore();
22. cs.init();
23. }
24.
25. /**
26. * 初试化cache
27. */
28. private void init() {
29. URL url = getClass()。getResource("/config/context/ehcache.xml");
30. manager = new CacheManager(url);
31. cache = manager.getCache("UrlCache");
32. }
33.
34. /**
35. * 清除cache
36. */
37. @SuppressWarnings("unused")
38. private void destory() {
39. manager.shutdown();
40. }
41.
42. /**
43. * 得到某个key的cache值
44. *
45. * @param key
46. * @return
47. */
48. public static Element get(String key) {
49. return cache.get(key);
50. }
51.
52. /**
53. * 清楚key的cache
54. *
55. * @param key
56. */
57. public static void remove(String key) {
58. cache.remove(key);
59. }
60.
61. /**
62. * 设置或更新某个cache值
63. *
64. * @param element
65. */
66. public static void put(Element element) {
67. cache.put(element);
68. }
69.
70. public static void removeAll(){
71. cache.removeAll();
72. }
73.
74.
75.
76. public static void main(String[] args) {
77. Map m = new HashMap();
78. m.put("1", "1");
79. m.put("2", "2");
80. m.put("3", "3");
81. Map m1 = new HashMap();
82. m1.put("11", "11");
83. m1.put("21", "21");
84. m1.put("31", "31");
85. CacheStore.remove("1");
86. System.out.println(CacheStore.get("1"));
87. System.out.println(CacheStore.get("2"));
88. System.out.println(CacheStore.get("2"));
89. CacheStore.removeAll();
90. System.out.println(CacheStore.get("2"));
91. System.out.println(CacheStore.get("3"));
92. System.out.println("------end-----");
93. }
94.}
下载ehcache.jar
拦截器代码:
Java代码
1.package mon.cache;
2.
3.import java.io.UnsupportedEncodingException;
4.import java.util.Arrays;
5.import java.util.Map;
6.
7.import javax.servlet.http.HttpServletRequest;
8.import javax.servlet.http.HttpServletResponse;
9.
10.import net.sf.ehcache.Element;
11.
12.import org.apache.log4j.Logger;
13.import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
14.
15.import mon.util.AuthenticationUtils;
16.
17./**
18. * 查询条件缓存的拦截器
19. *
20. * @author KingViker
21. *
22. */
23.public class SearchCacheInterceptor extends HandlerInterceptorAdapter
24.{
25. private static final Logger logger = Logger
26. .getLogger(SearchCacheInterceptor.class);
27.
28. @SuppressWarnings("unchecked")
29. @Override
30. public boolean preHandle(HttpServletRequest request,
31. HttpServletResponse response, Object handler)throws Exception {
32. ("记录查询参数拦截器******begin");
33. String url = request.getServletPath();
34. String ip = request.getRemoteAddr();
35. Map<String, String[]> paramsMap = request.getParameterMap();
36. String userName = AuthenticationUtils.getUsername();
37. if (url.indexOf("list.do") != -1) {
38. if (paramsMap.get("goBack") != null) {
39. Element e = CacheStore.get(ip
40. + userName + url);
41. if (e != null) {
42. ("取出缓存的查询参数,重定向连接");
43. response.sendRedirect(request.getRequestURL()+(String)e.getValue());
44. return false;
45. }
46. } else {
47. ("更新查询参数");
48. CacheStore.put(new Element(ip+ userName + url, changeMapToString(paramsMap)));
49. }
50. }
51. ("记录查询参数拦截器******begin");
52. return true;
53. }
54.
55. private String changeMapToString(Map<String, String[]> paramsMap) {
56. StringBuffer url = new StringBuffer();
57. url.append("?");
58. for(Map.Entry<String, String[]> entry :paramsMap.entrySet()){
59. String key = entry.getKey();
60. String [] value = entry.getValue();
61. url.append(key+"="+encodeUrl(Arrays.toString(value)));
62. url.append("&");
63. }
64. System.out.println(url);
65. return url.toString();
66. }
67. private String encodeUrl(String value) {
68. String result = "";
69. result = value.replaceAll("\\[", "")。replaceAll("\\]", "");
70. try {
71. byte temp[]=result.getBytes("UTF-8");
72. result=new String(temp,"ISO-8859-1");
73. } catch (UnsupportedEncodingException e) {
74. e.printStackTrace();
75. }
76. return result;
77. }
78.}
拦截器类继承自HandlerInterceptorAdapter,重写了prehandle方法。prehandle是在请求前执行,还可以重写afterCompletion和postHandle两个方法,分别是请求后和请求前后执行。
我的拦截器的代码原先的逻辑不是这样。我原先的逻辑是利用反射直接更改request的parameterMap保存的值,不需要其他的操作很简单,也不需要重定向。但是这个思路有两个问题:
1.我用ehcache保存时直接保存的是parameterMap的引用,每次请求过来之后spring都会清空并且重新初始化这个map,导致ehcache未能缓存到真正的数据。
2.在测试时发现,spring框架从请求接受参数后并且封装到了bean里面之后请求才能拦截到,也就是说我更改了parameterMap的值,controller收到的请求还是未更改的数据。
所以我改变了思路,把每次请求的parameterMap对象封装成字符串然后在缓存,需要使用缓存时,直接取出并重定向sendredirectt.
但是sendreditect是get方式的请求,浏览器一般会把请求连接中的中文参数进行转码,转成ISO-8859-1,产生了乱码问题,所以需要在链接后面拼接参数时需要对中文转码。这也就是上面的encodeUrl函数的作用。
写这篇文章的目的只是介绍一下实现思路和用到的一些现有框架,以及其中遇到的一些问题。给一些需要实现类似功能的道友一个实现思路而已。这里不提供源码,我个人是很不喜欢伸手党的。就是因为编程界有太多的伸手党,导致了很多人能做一些项目,但是出现问题就不知道怎么改,或者明明性能上只需要1各单位,偏偏不知所以然的用了10各单位来实现功能。我个人提倡,用框架的时候多想想实现,别一味的用,要不然用到老,还是在用别人的框架,永远写不出自己的框架。
发表评论
-
hibernate抓取策略fetch=select /join/subselect
2016-04-10 11:24 586出处:http://blog.csdn.net/ychato ... -
hibernate缓存机制详细分析(一级、二级、查询缓存,非常清晰明白)
2016-04-09 22:23 515收藏自:http://www.360doc.com/cont ... -
hibernate实现JTA事物--代码
2014-11-08 16:15 479package com.ajita.jta; impo ... -
Hibernate的三种连接池设置C3P0、Proxool和DBCP
2014-11-08 16:16 449Xml代码 <!-- JDBC驱动程序 --& ... -
EHCache的使用
2014-05-22 11:39 494在开发高并发量,高性 ... -
缓存 hibernate
2014-06-17 09:40 4631. Session---单数据加载---load/ ge ... -
hibernate + ehcache的例子
2014-05-12 11:23 510这是个hibernate + ehcache的例子,目前使用最 ... -
Hibernate使用EHCache二级缓存 .
2014-05-12 10:30 460数据库结构: create table teamEH ... -
hibernate ehcache
2014-05-12 10:01 4261.EhCache是什么 EhCac ... -
Hibernate中cascade和inverse的作用
2014-05-07 10:38 547Inverse和cascade是Hibernate映射中最难掌 ... -
Hibernate中inverse的用法 .
2014-05-07 10:40 440一、Inverse是hibernate双向关系中的基本概念。i ... -
关联关系
2014-04-22 21:52 337一对一单向外键关联 (学生卡表里有“studentId”字段) ... -
Hibernate一对多,多对一,多对多,一对一关系汇总
2014-05-07 10:42 598一对多 ◆name:集合属性的名称(也可以理解为一对多中那个 ... -
HibernateTemplate+HibernateDaoSupport+SessionFactory
2014-04-19 20:13 507HibernateTemplate @Component ... -
数据库事物
2014-06-17 09:40 3581. 脏读 :脏读就是指当 ... -
Open Session In View
2014-06-17 09:40 454从昨天下午一直纠结到现在,原来是项目启用了Open Sessi ... -
Hibernate主键生成策略
2014-06-20 09:33 2811、自动增长identity 适用于MySQL、DB2、MS ...
相关推荐
在缓存管理方面,Spring 提供了 Spring Cache抽象层,可以方便地集成各种缓存实现,如Ehcache、Hazelcast或Redis。 **Ehcache** 是一个广泛使用的Java缓存库,适合在内存中存储数据。它提供了一种快速访问最近使用...
在这个"spring+ehcache示例整合Demo"中,我们将会探讨如何将Ehcache集成到Spring框架中,以实现高效的缓存管理。 首先,我们需要在项目的`pom.xml`文件中引入Ehcache和Spring的依赖。Ehcache通常使用的是`org....
在本篇【Spring AOP+ehCache简单缓存系统解决方案】中,我们将探讨如何利用Spring AOP(面向切面编程)和ehCache框架来构建一个高效、简单的缓存系统,以提升应用程序的性能。ehCache是一款流行的开源Java缓存库,它...
1.通过google ehcache-spring-annotatios.jar自动注解方式实现整合Spring+Ehcache。 2.Action里通过struts2-spring-plugin.jar插件自动根据名字注入。 3.Ajax无刷新异步调用Struts2,返回Json数据,以用户注册为例。...
**Spring+EhCache缓存实例详解** 在现代的Java企业级应用中,缓存技术扮演着至关重要的角色,它能够显著提升系统性能,减少数据库负载。Spring框架与EhCache的结合,为开发者提供了一种高效、易用的缓存解决方案。...
在本文中,我们将深入探讨如何使用SpringBoot、MyBatis和Ehcache来实现缓存数据。Ehcache是一款高效且易于使用的Java内存缓存框架,对于提升应用程序性能,尤其是在处理大量数据时,能起到显著作用。虽然在分布式...
本篇文章将详细介绍如何在Spring项目中集成Ehcache,以及如何通过Spring的AOP(面向切面编程)实现方法级别的缓存注解。 首先,我们需要在项目中引入Ehcache的依赖。通常,这可以通过在`pom.xml`文件中添加Maven...
本示例"spring+ehcache demo"将带你深入理解如何在Spring环境中集成并使用Ehcache进行数据缓存。 Ehcache是一款广泛使用的开源Java缓存库,它提供了内存和磁盘存储,支持分布式缓存,并且可以与Spring框架无缝结合...
本篇文章将详细探讨如何在Spring框架中集成并实现基于方法的缓存机制,利用Ehcache来优化数据访问。 首先,我们需要理解Spring的AOP概念,AOP允许我们定义横切关注点,如日志、事务管理或,正如在这个案例中,缓存...
在Spring中,Ehcache可以被集成为一个缓存提供者,通过@Cacheable、@CacheEvict等注解实现方法级别的缓存控制。这有助于提升查询效率,尤其是在处理大数据量时。 **整合过程** 1. **配置Spring** 首先,我们需要...
总的来说,这个压缩包文件提供了一个基础的Java Web项目模板,展示了如何整合Maven、Spring、Spring MVC和Ehcache来实现一个具备缓存功能的Web应用。开发者可以通过学习和修改这个实例,加深对这些技术的理解并应用...
综上所述,通过 Spring AOP 和 EhCache 的结合,我们可以创建一个高效的缓存系统,它能够在 Service 和 DAO 层自动缓存查询结果,并在数据更新时自动刷新缓存。这种设计不仅可以提高系统的响应速度,还可以减轻...
本示例旨在通过一个完整的Spring集成Ehcache的Demo,帮助开发者理解如何在实际项目中实现高效的缓存管理。 首先,Ehcache是一个开源的、基于Java的分布式缓存系统,它可以显著减少对数据库的访问,从而提高系统的...
"Spring+Struts+页面缓存+内存数据库+licence+proxool+EhCache" 的组合提供了一个强大的系统基础架构,便于快速开发和部署。接下来,我们将深入探讨这些组件及其在J2EE中的作用。 首先,Spring框架是Java应用的核心...
Ehcache可以缓存查询结果,减少对数据库的频繁访问,提高系统响应速度。 4. **实体类和映射文件**:Hibernate通过ORM将Java对象映射到数据库表,实体类和对应的`.hbm.xml`或`@Entity`注解定义了这种映射关系。 5. ...
在Spring中整合Ehcache,可以通过Spring的缓存抽象进行配置,定义缓存注解如`@Cacheable`、`@CacheEvict`、`@CachePut`来控制缓存的存取和清除。Ehcache的配置文件(ehcache.xml)可以指定缓存的大小、存活时间和...
在SSH集成中,Ehcache常被用来缓存Hibernate的查询结果,避免频繁的数据库交互。Spring可以配置为自动管理Ehcache,包括启动、停止和更新缓存内容。 具体实现时,开发者需要编写相关的实体类、持久化映射文件、...
【B1】Spring+SpringMVC+Ehcache+Shiro+BootStrap企业级开发平台源码下载 内置功能 用户管理 角色管理 菜单管理 字典管理 部门管理 附件管理 参数管理 连接池监视 日志管理 技术选型 1、后端 核心框架...