首页 > 其他分享 >jpa hibernate 下配置ehcache

jpa hibernate 下配置ehcache

时间:2023-06-13 14:02:36浏览次数:56  
标签:ehcache hibernate jpa jar JPA org true

评:



spring + jpa(hibernate实现)配置Ehcache,如何获取ehcache统计信息

1. <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
2. <property name="dataSource" ref="dbcpDataSource">
3. <property name="jpaVendorAdapter">
4. <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
5. <property name="database" value="MYSQL">
6. <property name="showSql" value="true">
7. </bean>
8. </property>
9. <property name="jpaProperties">
10. <props>
11. <prop key="hibernate.cache.provider_class">net.sf.ehcache.hibernate.SingletonEhCacheProvider</prop>
12. <prop key="hibernate.cache.use_query_cache">true</prop>
13. <prop key="hibernate.cache.use_second_level_cache">true</prop>
14. <prop key="hibernate.generate_statistics">true</prop>
15. <prop key="hibernate.use_sql_comments">true</prop>
16. <prop key="hibernate.format_sql">true</prop>
17. <prop key="hibernate.generate_statistics">true</prop>
18. </props>
19. </property>
20. </bean>



Entity上面也加了Cache注释,ehcache.xml也配置好了,但是jpa如何获得ehcache的一些统计信息呢?

缓存应该是生效了,查询很多次只生成一条SQL语句,像Hibernate里面SessionFactory里面有个statistics()函数 可以打印ehcache统计信息的,不知道JPA里面怎么样打印ehcache的统计信息,比如缓存命中情况等,要不然光配置好了,不能查看统计情况也没 有意义啊

 

已经搞定了:-)

Session session = (Session)baseDAO.getEntityManager().getDelegate();
SessionFactory sessionFactory = session.getSessionFactory();

这样就可以获得SessionFactory了,然后就可以调用里面的getStatistics()获得统计信息了,现在结贴。

 

 

在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" 
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; 
CacheConcurrencyStrategy.READ_WRITE)
      @Entity
      @Table(name = "catagory")
      public class CatagoryEntity extends BaseEntity { ... }

 

5, 如何使用二级缓存中的对象

 

setCacheable(true);
       在JPA中,由于EntityManager中得到的javax.persistence.Query没有这个方法了。我们可以通过
       javax.persistence.Query.setHint(”org.hibernate.cacheable”, true);来实现读取二级缓存。

 

 

6, 在log4j输出日志中可以看到缓存机制作用

log4j.logger.org.hibernate.cache=debug

 

标签:ehcache,hibernate,jpa,jar,JPA,org,true
From: https://blog.51cto.com/u_16080829/6469269

相关文章

  • 各数据库连接maven配置 各种数据库Hibernate链接配置
    评:Derbydbdrivermavendependency<dependency><groupId>org.apache.derby</groupId><arti......
  • s1sh整合实例 Strut1.2+Spring2.6+Hibernate3.2
    [code]开发环境:MyEclipse8.5+Mysql说明:本实例是简单注册程序(只有两个属性)数据库脚本:user.sqlCREATETABLE`user`(`Id`int(11)NOTNULLAUTO_INCREMENT,`username`varchar(255)DEFAULTNULL,`password`varchar(255)DEFAULTNULL,P......
  • Hibernate基础
    Hibernate基础[code]Part11.持久化对象Eventevent=newEvent();//populatetheeventSessionsession=factory.openSession();session.save(event);session.flush();session.close();当保存一个对象的时候,hibernate出于性能......
  • Hibernate数据校验简介
    Hibernate数据校验简介我们在业务中经常会遇到参数校验问题,比如前端参数校验、Kafka消息参数校验等,如果业务逻辑比较复杂,各种实体比较多的时候,我们通过代码对这些数据一一校验,会出现大量的重复代码以及和主要业务无关的逻辑。SpringMVC提供了参数校验机制,但是其底层还是通过Hib......
  • 简单实现JPA实体继承映射
    一个简单实现父类加注解:@MappedSuperclass@MappedSuperclasspublicclassTraceabilityimplementsSerializable{/***创建时间**/privateDatecreateDt;/***更新时间**/privateDateupdateDt;/***创建人员......
  • JPA中的ManyToOne和OneToMany
    概念说明一个用户可以有多个手机,一个手机只能被一个用户使用。这个就是多对一的关系,或者称之为一对多。用户是一,手机是多。外键设置在多这一方(如果不懂,可以百度一下)。具体设置的表如下:EMPLOYEE(table)EMP_IDFIRSTNAMELASTNAMESALARYMANAGER_ID1BobWay5000022SarahSmith75000null......
  • spring boot jar Initialized JPA EntityManagerFactory 失败【导致jar启动闪退】
    2023-06-1021:29:04.460WARN24060---[main]ConfigServletWebServerApplicationContext:Exceptionencounteredduringcontextinitialization-cancellingrefreshattempt:org.springframework.beans.factory.BeanCreationException:Errorcreating......
  • hibernate------HQL总结
    关键字:hibernate------hql总结以以个普通Users表为例:建表语句:Java代码1.CREATEDATABASE`interceptor`2.CHARACTERSET'utf8';3.4.USE`interceptor`;5.6.DROPTABLEIFEXISTS`users`;7.createtableusers(8.idintauto_increme......
  • Hibernate_配置说明
    <?xmlversion="1.0"encoding="utf-8"?><!DOCTYPEhibernate-configurationPUBLIC"-//Hibernate/HibernateConfigurationDTD//EN""http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"......
  • Hibernate_根据条件动态组装sql/hql语句(仿ibatis动态查询语句功能)
     1.功能需求背景 项目中使用hibernate作为数据持久层框架,主要考虑hibernate在进行一些简单的crud操作时非常便利,不需要和ibatis似的为每个sql操作都写一堆文件,但是同时也带来了一些局限性,如类似ibatis强大的动态查询功能用不了了,但是这个功能在项目中的应用场景又很大,hibernate......