实现hibernate二级缓存,需要进行如下配置:
配置步骤一:
修改hibernate.cfg.xml文件,在配置中增加:
<!-- 开启查询缓存 -->
<property name="hibernate.cache.use_query_cache">true</property>
<!-- 开启二级缓存 -->
<property name="hibernate.cache.use_second_level_cache">true</property>
<!-- 指定二级缓存提供商驱动 -->
<property name="cache.provider_class">org.hibernate.cache.EhCacheProvider</property>
配置步骤二:
在工程项目conf文件夹(依据项目修改路径,保证编译后在classes路径下即可)下新建一个ehcache.xml文件,其内容为:
<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="ehcache.xsd">
<diskStore path="java.io.tmpdir" />
<defaultCache maxElementsInMemory="10000" eternal="false"
timeToIdleSeconds="120" timeToLiveSeconds="120" overflowToDisk="true"
diskPersistent="false" diskExpiryThreadIntervalSeconds="120"
memoryStoreEvictionPolicy="LRU" />
</ehcache>
配置步骤三:
如果要缓存某对象,修改其hbm文件,在class节点下添加<cache usage="read-only"/>属性例如:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping package="com.demo.entity">
<class name="com.vogue.bbsphoto.entity.Forum"
table="cdb_forums">
<cache usage="read-only"/>
<id name="ID" column="fid" unsaved-value="null">
<generator class="increment" />
</id>
<property name="name" column="name" type="string" />
<property name="type" column="type" type="string" />
</class>
</hibernate-mapping>
配置步骤四:
为了使用查询缓存,Query必须设置cacheable为true,query.setCacheable(true);
例如dao父类中用于hql查询的方法修改后为:
/**
* 执行hql语句的查询
* @param sql
* @return
*/
public List executeQuery(String hql){
List list = new ArrayList();
Session session = HibernateSessionFactory.currentSession();
Transaction tx = null;
Query query = session.createQuery(hql);
query.setCacheable(true);
try {
tx = session.beginTransaction();
list = query.list();
tx.commit();
} catch (Exception ex) {
ex.printStackTrace();
HibernateSessionFactory.rollbackTransaction(tx);
} finally {
HibernateSessionFactory.closeSession();
}
return list;
}
完成上面的四个步骤,即可实现。但是在开发过程中可能会碰到问题:
1、报错:找不到net/sf/ehcache/CacheException类,问题是缺少ehcache.jar包
2、导入jar包后报错:
java.lang.IllegalAccessError: tried to access method net.sf.ehcache.CacheManager.<init>()V from class org.hibernate.cache.EhCacheProvider
因为版本不正确,可以从网上下载ehcache-1.2.3.jar 导入即可完成。问题解决
测试:在测试类中或者公共dao中增加
Statistics message=dao.sessionFactory.getStatistics();
System.out.println("二级缓存命中数:"+message.getSecondLevelCacheHitCount());
多次点击查询调用此方法,后台输出如果二级缓存命中数>0 则成功。
希望此文档对在此处碰到问题的人有所帮助。
分享到:
相关推荐
本文将详细探讨如何在Spring集成的Hibernate环境中配置二级缓存,以及其背后的原理和实践。 首先,我们需要了解什么是二级缓存。在Hibernate中,一级缓存是每个Session内部的缓存,它自动管理实体的状态,当一个...
下面我们将详细探讨如何为Spring集成的Hibernate配置二级缓存。 首先,我们需要了解Hibernate的二级缓存机制。一级缓存是每个Session内部的缓存,而二级缓存则是SessionFactory级别的,它可以被多个Session共享。二...
本篇将深入探讨Hibernate的一级缓存和二级缓存,以及查询缓存的配置和使用。 ### 一级缓存 一级缓存是Hibernate默认提供的缓存,它是Session级别的,每个Hibernate Session都有一个私有的、本地的一级缓存。当我们...
配置二级缓存主要包括以下几个步骤: 1. **引入依赖**:首先需要在项目的 Maven 或者 Gradle 构建文件中添加相应的二级缓存库依赖,如 Ehcache 或 Infinispan。 2. **配置**:在 Hibernate 的配置文件(如 ...
在Spring Boot项目中配置Redis作为Hibernate的二级缓存,我们需要以下步骤: 1. **添加依赖**: 首先,在`pom.xml`文件中添加Spring Boot的JPA、Hibernate和Redis相关依赖,如: ```xml <groupId>org.spring...
二级缓存可以通过设置不同的并发访问策略来解决并发问题,如事务型、读写型或非严格读写型,以适应不同场景下的需求。 持久化层的缓存范围决定了缓存的生命周期和访问权限。事务范围的缓存最安全,但只限于当前事务...
2. **配置二级缓存**:在`hibernate.cfg.xml`配置文件中,需要指定二级缓存的提供商。例如,添加如下配置来启用ehcache: ```xml <property name="hibernate.cache.region.factory_class">org.hibernate.cache....
配置二级缓存需要在Hibernate的配置文件中指定缓存提供者,并为需要缓存的实体类设置缓存策略。以下是一个简单的二级缓存配置示例: ```xml <hibernate-configuration> <!-- 配置缓存插件 --> <property name="...
以Ehcache为例,它是Hibernate常用的一种二级缓存解决方案,提供了内存和磁盘两层缓存,支持自动过期策略,确保数据的实时性。 配置二级缓存主要包括以下几个步骤: 1. 引入依赖:在项目的pom.xml或build.gradle...
3. **Hibernate与memcached集成**:将memcached作为Hibernate二级缓存的提供者,需要配置相应的插件或库,如hibernate-ehcache或hibernate-memcached。集成过程通常包括配置Hibernate的配置文件(hibernate.cfg.xml...
Ehcache是Hibernate常用的二级缓存提供商,它是一款开源、高性能、轻量级的缓存解决方案。 配置Hibernate4的二级缓存主要涉及以下几个步骤: 1. **引入依赖**:首先,你需要在项目的pom.xml或build.gradle文件中...
- **配置复杂**:二级缓存需要在Hibernate配置文件中指定缓存提供商,并对实体类进行配置,以便它们能够参与缓存。 - **缓存策略**:二级缓存支持不同的缓存策略,如读写策略、只读策略、定时刷新策略等,可以根据...
Hibernate 是一个流行的对象关系...通过以上内容,我们可以了解到 Hibernate 的二级缓存和查询缓存机制,以及如何在实际应用中配置和使用它们。合理利用这些缓存技术,能有效提升应用程序的性能,减轻数据库的压力。
总结来说,Hibernate的二级缓存是提升性能的关键手段,通过合理配置和使用,可以有效减少数据库交互,提高应用响应速度。需要注意的是,二级缓存虽然强大,但也需谨慎使用,防止数据一致性问题,尤其是在高并发环境...
通过上述步骤,我们可以有效地在Hibernate中配置二级缓存以及查询缓存,从而显著提升数据访问性能。对于更复杂的缓存需求,则可以通过引入其他缓存组件或者自定义缓存策略来实现,以达到更高的系统性能和响应速度。
本文将深入探讨Hibernate的一级缓存、二级缓存以及查询缓存,通过具体的实例来阐述它们的工作原理和使用方法。 首先,我们从一级缓存开始。一级缓存是Hibernate默认提供的缓存,它是每个Session级别的,也被称为...
在Hibernate配置文件(hibernate.cfg.xml)中,我们需要添加二级缓存插件的相关配置,例如Ehcache: ```xml <property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache....
配置二级缓存的步骤通常如下: 1. **引入依赖**:在项目构建工具(如Maven或Gradle)的配置文件中添加对应二级缓存提供者的依赖。如果是Ehcache,对应的Maven坐标可能是: ```xml <groupId>org.hibernate ...