文档章节

Hibernate && ehcache 缓存配置(注解方式)

lyg945
 lyg945
发布于 2014/06/24 21:24
字数 670
阅读 227
收藏 14
点赞 0
评论 0

1.  首先设置EhCache,建立配置文件ehcache.xml,默认的位置在class-path,可以放到你的src目录下:

<xml version="1.0" encoding="UTF-8"?>   
<ehcache>   
 <diskStore path="java.io.tmpdir"/>     
  <defaultCache   
   maxElementsInMemory="10000"    
   eternal="false"    
   
   overflowToDisk="true"    
   
   timeToIdleSeconds="300"    
   timeToLiveSeconds="180"    
   diskPersistent="false"   
   diskExpiryThreadIntervalSeconds= "120"/>     
<ehcache>   



  2.  在Hibernate配置文件中设置:

<hibernate-configuration>

<session-factory>
<property name="hibernate.cache.provider_class">
     org.hibernate.cache.EhCacheProvider
</property>
<property name="cache.use_second_level_cache">
    true
</property>
</session-factory>

</hibernate-configuration> 



此外,可以把cache.use_second_level_cache设置为false关闭所有的hibernate二级缓存。但此属性对指定<cache>的类缺省为true。

   3.  为了使用二级缓存,需要在每一个Hibernate Entity上配置。

@Entity   
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)    
public class Forest { ... }   



@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER)    
@JoinColumn(name="CUST_ID")    
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)    
public SortedSet getTickets() {    
    return tickets;    
}   


@Cache(    
    CacheConcurrencyStrategy usage();                 (1)    
    String region() default "";                       (2)    
    String include() default "all";                   (3)    
)   


(1) usage: 提供缓存对象的事务隔离机制,可选值有以下几种

(NONE, READ_ONLY, NONSTRICT_READ_WRITE, READ_WRITE, TRANSACTIONAL)


ehcache不支持transactional,其他三种可以支持。

read-only:无需修改, 那么就可以对其进行只读 缓存,注意,在此策略下,如果直接修改数据库,即使能够看到前台显示效果,

但是将对象修改至cache中会报error,cache不会发生作用。另:删除记录会报错,因为不能在read-only模式的对象从cache中删除。


read-write:需要更新数据,那么使用读/写缓存 比较合适,前提:数据库不可以为serializable transaction isolation level

(序列化事务隔离级别)


nonstrict-read-write:只偶尔需要更新数据(也就是说,两个事务同时更新同一记录的情况很不常见),也不需要十分严格的事务隔离,

那么比较适合使用非严格读/写缓存策略。



(2) region (optional): 指定缓存的区域,默认是类的全限定名。利用缓存区域,可以更精确的指定每个区域的缓存超前策略。

如果指定了缓存区域前缀(在hibernate.cfg.xml中设置cache.region_prefix属性为一个字符串),则所有的缓存区域名前将加上这个前缀。

hbm文件查找cache方法名的策略

先查找ehcache.xml中的name的属性值,如果有个类是com.yybean.Foo,则使用ehcache.xml里面配置的name名为com.yybean.Foo的cache,

like:

<cache name="com.yybean.Foo …

如果不存在与类名匹配的cache名称,则用defaultCache。

如果Foo包含set集合,则需要另行指定其cache


(3) include (optional): all to include all properties, non-lazy to only include non lazy properties (default all).


调试时候使用log4j的log4j.logger.org.hibernate.cache=debug,更方便看到ehcache的操作过程,主要用于调试过程,实际应用发布时候,请注释掉,以免影响性能。


© 著作权归作者所有

共有 人打赏支持
lyg945

lyg945

粉丝 37
博文 27
码字总数 15831
作品 0
上海
后端工程师
在Spring、Hibernate中使用Ehcache缓存

在Spring、Hibernate中使用Ehcache缓存 前一篇http://www.cnblogs.com/hoojo/archive/2012/07/12/2587556.html介绍了Ehcache整合Spring缓存,使用页面、对象缓存;这里将介绍在Hibernate中使...

DavidBao ⋅ 2015/05/15 ⋅ 0

在Spring、Hibernate中使用Ehcache缓存

前一篇http://blog.csdn.net/ibmhoojo/article/details/7739181介绍了Ehcache整合Spring缓存,使用页面、对象缓存;这里将介绍在Hibernate中使用查询缓存、一级缓存、二级缓存,整合Spring在...

ibm_hoojo ⋅ 2012/07/12 ⋅ 0

Ehcache的简单使用

前段时间公司的新项目要求使用Hibernate二级缓存,近期通过在网上也看了不少帖子。 ehcache是一个非常轻量级的框架,1.2以后就支持了集群,并且是Hibernate默认的缓存provider. 主要特性 1....

Smember ⋅ 2015/11/30 ⋅ 0

spring中的缓存

Spring中的cache是为方法做缓存的,spring只是提供了个缓存抽象,具体的实现由的三方提供。 要使用Spring缓存,需要以下三步 1.向Spring配置文件导入context:命名空间 2.在Spring配置文件启用...

J星星点灯 ⋅ 2017/12/01 ⋅ 0

ehcache整合spring注解方式

一、简介   在hibernate中就是用到了ehcache 充当缓存。spring对ehcache也提供了支持,使用也比较简单,只需在spring的配置文件中将ehcache的ehcache.xml文件配置进去即可。在spring中使用...

烟火_ ⋅ 2014/11/23 ⋅ 0

在 JPA、Hibernate 和 Spring 中配置 Ehcache 缓存

该贴详细介绍在一起使用 jpa, hibernate 和 spring 时配置 ehcache 二级缓存的步骤。 缓存配置 首先在 persistence.xml 配置文件中添加下面内容:...

鉴客 ⋅ 2011/11/10 ⋅ 2

Hibernate+EhCache配置二级缓存

Hibernate+EhCache配置二级缓存 博客分类: HibernateEhCacheHibernatecache二级缓存blog迁移至 :http://www.micmiu.com 本文主要讲一讲hibernate+EhCache配置二级缓存的基本使用方法,主要分...

我的小确幸日记 ⋅ 2016/05/11 ⋅ 0

Maven搭建SpringMVC+Hibernate项目详解

前言 今天复习一下SpringMVC+Hibernate的搭建,本来想着将Spring-Security权限控制框架也映入其中的,但是发现内容太多了,Spring-Security的就留在下一篇吧,这篇主要搭建SpringMVC4.1.4和H...

Airship ⋅ 2016/12/12 ⋅ 0

Spring配置文件

Spring配置文件详解 1,非注解版: <!-- 头文件,主要注意一下编码 --> <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springfram......

天呀鲁哇 ⋅ 2015/03/06 ⋅ 0

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

一、准备工作 如果你的系统中已经成功加入Spring、Hibernate;那么你就可以进入下面Ehcache的准备工作。 1、 下载jar包 Ehcache 对象、数据缓存:http://ehcache.org/downloads/destination?...

zmf ⋅ 2014/09/16 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

数据库备份和恢复

备份:mysqldump -u root -p 数据库>磁盘路径 恢复:mysql -u root -p 数据库<sql脚本的磁盘路径

anlve ⋅ 50分钟前 ⋅ 0

发生了什么?Linus 又发怒了?

在一个 Linux 内核 4.18-rc1 的 Pull Request 中,开发者 Andy Shevchenko 表示其在对设备属性框架进行更新时,移除了 union 别名,这引发了 Linus 的暴怒。 这一次 Linus Torvalds 发怒的原...

问题终结者 ⋅ 今天 ⋅ 0

在树莓派上搭建一个maven仓库

在树莓派上搭建一个maven仓库 20180618 lambo init 项目说明 家里有台树莓派性能太慢。想搭建一个maven私服, 使用nexus或者 jfrog-artifactory 运行的够呛。怎么办呢,手写一个吧.所在这个...

林小宝 ⋅ 今天 ⋅ 0

Spring发展历程总结

转自与 https://www.cnblogs.com/RunForLove/p/4641672.html 目前很多公司的架构,从Struts2迁移到了SpringMVC。你有想过为什么不使用Servlet+JSP来构建Java web项目,而是采用SpringMVC呢?...

onedotdot ⋅ 今天 ⋅ 0

Python模块/包/库安装(6种方法)

Python模块/包/库安装(6种方法) 冰颖机器人 2016-11-29 21:33:26 一、方法1: 单文件模块 直接把文件拷贝到 $python_dir/Lib 二、方法2: 多文件模块,带setup.py 下载模块包(压缩文件zip...

cswangyx ⋅ 今天 ⋅ 0

零基础学习大数据人工智能,学习路线篇!系统规划大数据之路?

大数据处理技术怎么学习呢?首先我们要学习Python语言和Linux操作系统,这两个是学习大数据的基础,学习的顺序不分前后。 Python:Python 的排名从去年开始就借助人工智能持续上升,现在它已经...

董黎明 ⋅ 今天 ⋅ 0

openJdk和sun jdk的区别

使用过LINUX的人都应该知道,在大多数LINUX发行版本里,内置或者通过软件源安装JDK的话,都是安装的OpenJDK, 那么到底什么是OpenJDK,它与SUN JDK有什么关系和区别呢? 历史上的原因是,Ope...

jason_kiss ⋅ 今天 ⋅ 0

梳理

Redux 是 JavaScript 状态容器,提供可预测化的状态管理。 它是JS的状态容器,是一种解决问题的方式,所以即可以用于 react 也可以用于 vue。 需要理解其思想及实现方式。 应用中所有的 stat...

分秒 ⋅ 今天 ⋅ 0

Java 后台判断是否为ajax请求

/** * 是否是Ajax请求 * @param request * @return */public static boolean isAjax(ServletRequest request){return "XMLHttpRequest".equalsIgnoreCase(((HttpServletReques......

JavaSon712 ⋅ 今天 ⋅ 0

Redis 单线程 为何却需要事务处理并发问题

Redis是单线程处理,也就是命令会顺序执行。那么为什么会存在并发问题呢? 个人理解是,虽然redis是单线程,但是可以同时有多个客户端访问,每个客户端会有 一个线程。客户端访问之间存在竞争...

码代码的小司机 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部