在Hibernate3 JPA里配置了一下非分布式环境的二级缓存,效果不错。具体过程如下:
1, 需要引入的jar包
http://ehcache.org/downloads/catalog 下载的包里已经包含了简单的例子和javadoc
ehcache-core-2.4.6.jar (必需)
ehcache-terracotta-2.4.6.jar (必需)
slf4j-api-1.6.1.jar
slf4j-jdk14-1.6.1.jar
2, 在JPA的persistence.xml中加入以下配置
<property name="hibernate.cache.provider_class"
value="org.hibernate.cache.SingletonEhCacheProvider" />
<property name="hibernate.cache.provider_configuration" value="/ehcache.xml" />
<property name="hibernate.cache.use_second_level_cache" value="true" />
<property name="hibernate.cache.use_query_cache" value="true" />
3, 对ehcache进行简单的设置(ehcache.xml)
<?xml version="1.0" encoding="UTF-8"?>
<ehcache>
<defaultCache maxElementsInMemory="1000" eternal="false"
timeToIdleSeconds="1200" timeToLiveSeconds="1200" overflowToDisk="false"
clearOnFlush="true">
</defaultCache>
<!-- 单独对某个entity的缓存策略设置-->
<cache name="com.payment.entity.PromotionEntity" maxElementsInMemory="100"
eternal="false"
timeToIdleSeconds="1200" timeToLiveSeconds="1200" overflowToDisk="false"
clearOnFlush="true">
</cache>
</ehcache>
4, JPA的Entity类中声明缓存的隔离机制
import org.hibernate.annotations.Cache;
import org.hibernate.annotations.CacheConcurrencyStrategy;
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
@Entity
@Table(name = "catagory")
public class CatagoryEntity extends BaseEntity { ... }
5, 如何使用二级缓存中的对象
在Hibernate中可以通过org.hibernate.Query.setCacheable(true);
在JPA中,由于EntityManager中得到的javax.persistence.Query没有这个方法了。我们可以通过
javax.persistence.Query.setHint(”org.hibernate.cacheable”, true);来实现读取二级缓存。
6, 在log4j输出日志中可以看到缓存机制作用
18:05:30,682 DEBUG SessionImpl:265 - opened session at timestamp: 5410486397673472
18:05:30,682 DEBUG StandardQueryCache:125 - checking cached query results in region:
org.hibernate.cache.StandardQueryCache
18:05:30,682 DEBUG EhCache:74 - key: sql: select promotione0_.id as id2_,
promotione0_.catagory_id as catagory6_2_, promotione0_.description as descript2_2_,
promotione0_.enabled as enabled2_, promotione0_.name as name2_, promotione0_.picture as
picture2_, promotione0_.product_id as product7_2_ from promotion promotione0_; parameters:
; named parameters: {}
18:05:30,682 DEBUG StandardQueryCache:183 - Checking query spaces for up-to-dateness:
[promotion]
18:05:30,682 DEBUG EhCache:74 - key: promotion
18:05:30,682 DEBUG EhCache:83 - Element for promotion is null
18:05:30,682 DEBUG StandardQueryCache:140 - returning cached query results
18:05:30,714 DEBUG EhCache:74 - key: com.payment.entity.PromotionEntity#1
18:05:30,714 DEBUG StatefulPersistenceContext:893 - initializing non-lazy collections
18:05:30,714 DEBUG EhCache:74 - key: com.payment.entity.PromotionEntity#2
18:05:30,714 DEBUG StatefulPersistenceContext:893 - initializing non-lazy collections
18:05:30,714 DEBUG EhCache:74 - key: com.payment.entity.PromotionEntity#3
18:05:30,714 DEBUG StatefulPersistenceContext:893 - initializing non-lazy collections
18:05:30,714 DEBUG EhCache:74 - key: com.payment.entity.PromotionEntity#4
18:05:30,714 DEBUG StatefulPersistenceContext:893 - initializing non-lazy collections
18:05:30,714 DEBUG EhCache:74 - key: com.payment.entity.PromotionEntity#5
分享到:
相关推荐
在本文中,我们将深入探讨如何在Spring Boot 2.1.4.RELEASE项目中结合JPA(Java Persistence API)和Hibernate实现Redis作为二级缓存。首先,我们需要理解这些技术的基本概念。 Spring Boot 是一个用于简化Spring...
在本配置中,Hibernate版本为5.1.3,支持JPA规范,提供了二级缓存功能,提高了数据访问性能。 4. **二级缓存(Ehcache)**: Ehcache是Hibernate的一个可选二级缓存插件,用于存储数据库查询结果,减少对数据库的...
但需要注意的是,二级缓存可能会增加数据的一致性风险,因为不同事务可能同时修改缓存中的同一数据。 使用JPA的二级缓存,我们需要进行以下几个步骤: 1. **选择缓存提供商**:JPA本身并不提供二级缓存实现,而是...
当我们要在Spring Boot项目中开启二级缓存时,一个常见的做法是整合Ehcache,利用它来实现JPA实体的二级缓存。二级缓存是基于会话工厂级别的缓存,用于缓存那些跨多个会话共享的数据。在Hibernate中,二级缓存默认是...
标题 "Hibernate4 + Ehcache 例子" 暗示了我们将探讨如何在Java应用程序中集成Hibernate4 ORM框架和Ehcache缓存系统。这个例子可能是关于如何提高数据访问性能,通过缓存策略来减少数据库查询的次数。 描述中的链接...
2. 配置hibernate.cfg.xml,启用二级缓存并指定Ehcache配置文件。 3. 在实体类上添加`@Cacheable`或`@Cache`注解,声明哪些实体类或属性需要缓存。 4. 对于特定查询,可以使用`@CacheRegion`注解来定义查询结果的...
在这个项目中,我们将深入探讨如何将 Spring Boot 与 Hibernate、Shiro 和 Ehcache 结合,以实现一个高效且安全的 Web 应用。 **1. Spring Boot 与 Hibernate 集成** Hibernate 是一个强大的对象关系映射(ORM)...
- `hibernate-ehcache-4.1.7.Final.jar`: Hibernate与EHCache的集成库,实现了二级缓存功能。 - `hibernate-jpa-2.0-api-1.0.1.Final.jar`: JPA API,提供了ORM规范接口。 - `hibernate-commons-annotations-4.0.1....
在实现二级缓存时,我们需要配置Hibernate的缓存提供者,如EhCache或Infinispan。以EhCache为例,我们需要在hibernate.cfg.xml配置文件中添加对应的provider和cache配置: ```xml <property name="hibernate.cache....
第二次调用则会从缓存中获取数据,从而避免了重复的数据库查询。 通过这种方式,Spring Boot 2.x与EhCache的集成使得我们可以轻松地在应用程序中启用缓存,提升性能。不过,要注意根据实际需求调整EhCache的配置,...
- **MaxEntries**: 指定缓存中最大条目数量,当达到上限时,根据特定的淘汰策略(如LRU, FIFO等)移除旧的缓存项。 - **Transactions**: EhCache支持事务,可以在事务范围内保证缓存的一致性。 6. **缓存异常处理...
"Spring Boot 集成 Ehcache 2.x 用于 Hibernate 二级缓存" 本篇文章主要介绍了如何在 ...本文主要介绍了如何在 Spring Boot 中集成 Ehcache 2.x 作为 Hibernate 的二级缓存,提供了一份详细的配置示例,供读者参考。
在Spring Boot应用中,它可以作为二级缓存,提高数据读取速度。通过在`pom.xml`中引入Ehcache的依赖,并在配置文件中进行相应设置,我们可以指定哪些数据需要被缓存,以及缓存策略。Ehcache的使用降低了数据库的负载...
在 Hibernate 中,Ehcache 可以作为二级缓存提供服务,将查询结果存储在缓存中,避免重复查询数据库。只需在 Hibernate 配置文件中指定 Ehcache 作为二级缓存提供者即可。 ## 5. Ehcache 的分布式缓存 Ehcache ...
最后,可能还设置了Ehcache缓存策略,用于存储频繁访问的数据,提升性能。 总结来说,通过Spring Boot集成ActiveMQ、DataJPA和Ehcache,我们可以构建一个高效、响应快速的应用平台。ActiveMQ提供可靠的异步通信,...
这里我们以 EhCache 为例,需要在 Hibernate 配置中启用二级缓存并指定缓存提供者。 2. 配置缓存策略:在 Hibernate 的配置文件中,定义哪些实体类需要使用二级缓存,并设置缓存策略,如读写模式、查询缓存等。 3....
spring4.04,springmvc, hibernate4.3 ,JPA2.1, shiro1.2, ehcache2 完全整合,用Ehcache做缓存,通用的DAO、Service接口和实现。完全注解配置,事务拦截方式处理。C0p3做连接池,JSP和Freemarker做View的模板。Shiro...
Hibernate是一个实现了JPA规范的开源ORM框架,它提供了更丰富的功能和更灵活的配置,包括对复杂查询的支持、二级缓存等。 **JPA与Hibernate的关系** JPA是一组接口和规范,而Hibernate是这些规范的具体实现之一。...
**Ehcache缓存**: Ehcache是一个广泛使用的Java缓存解决方案,它可以提高系统的响应速度和效率。在本商城系统中,Ehcache可能被用来缓存频繁访问的数据,比如热门商品、用户登录信息等,减少对数据库的直接访问,...
- 第二级缓存:为了提高性能,可以配置Hibernate使用第二级缓存,如Ehcache。 - JPA支持:Hibernate同时也支持Java Persistence API (JPA),可以通过@PersistenceUnit注解来管理EntityManagerFactory。 通过这个...