首先是pom.xml,这里面有一些dependency是没有用的,都贴上吧。
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.tch.test</groupId> <artifactId>simple-web</artifactId> <packaging>war</packaging> <version>0.0.1-SNAPSHOT</version> <name>simple-web Maven Webapp</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <junit-version>4.11</junit-version> <spring-version>3.2.6.RELEASE</spring-version> <hiberante-version>3.6.10.Final</hiberante-version> <struts2-version>2.3.16</struts2-version> <mysql-version>5.1.28</mysql-version> <log4j-version>1.2.17</log4j-version> <slf4j-version>1.7.5</slf4j-version> <aspectj-version>1.7.4</aspectj-version> <postgresql-version>9.1-901-1.jdbc4</postgresql-version> <ehcacheVersion>2.6.11</ehcacheVersion> </properties> <dependencies> <!-- junit --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit-version}</version> <scope>test</scope> </dependency> <!-- spring-context --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring-version}</version> </dependency> <!-- spring-orm --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>${spring-version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>${spring-version}</version> </dependency> <!-- hibernate --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>${hiberante-version}</version> </dependency> <!-- hibernate-proxool --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-proxool</artifactId> <version>${hiberante-version}</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-ehcache</artifactId> <version>${hiberante-version}</version> </dependency> <!-- struts2 --> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-core</artifactId> <version>${struts2-version}</version> </dependency> <!-- struts2-spring-plugin --> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-spring-plugin</artifactId> <version>${struts2-version}</version> </dependency> <!-- mysql --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql-version}</version> </dependency> <!-- log4j --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>${log4j-version}</version> </dependency> <!-- slf4j-log4j --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>${slf4j-version}</version> </dependency> <!-- aspectjrt --> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjrt</artifactId> <version>${aspectj-version}</version> </dependency> <!-- aspectjweaver --> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>${aspectj-version}</version> </dependency> <dependency> <groupId>postgresql</groupId> <artifactId>postgresql</artifactId> <version>${postgresql-version}</version> </dependency> <dependency> <groupId>net.sf.ehcache</groupId> <artifactId>ehcache-core</artifactId> <version>${ehcacheVersion}</version> </dependency> </dependencies> <build> <finalName>simple-web</finalName> </build> </project>
hibernate.cfg.xml:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration SYSTEM "classpath://org/hibernate/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <property name="hibernate.connection.driver_class">org.postgresql.Driver</property> <property name="hibernate.connection.password">postgres</property> <property name="hibernate.connection.url">jdbc:postgresql://localhost:5432/postgres</property> <property name="hibernate.connection.username">postgres</property> <property name="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</property> <property name="hibernate.current_session_context_class">thread</property> <property name="hibernate.show_sql">true</property> <!-- For singleton factory --> <!-- <property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory</property> --> <!-- enable second level cache and query cache --> <property name="hibernate.cache.use_second_level_cache">true</property> <property name="hibernate.cache.use_query_cache">true</property> <property name="net.sf.ehcache.configurationResourceName">/ehcache.xml</property> <property name="hibernate.hbm2ddl.auto">update</property> <property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property> <property name="hibernate.cache.region.factory_class">net.sf.ehcache.hibernate.EhCacheRegionFactory</property> <mapping class="com.tch.test.entity.Employee" /> </session-factory> </hibernate-configuration>
ehcache.xml:
<?xml version="1.0" encoding="UTF-8"?> <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="ehcache.xsd" updateCheck="false" monitoring="autodetect" dynamicConfig="true"> <diskStore path="java.io.tmpdir/ehcache" /> <defaultCache maxEntriesLocalHeap="10000" eternal="false" timeToIdleSeconds="120" timeToLiveSeconds="120" diskSpoolBufferSizeMB="30" maxEntriesLocalDisk="10000000" diskExpiryThreadIntervalSeconds="120" memoryStoreEvictionPolicy="LRU" statistics="true"> <persistence strategy="localTempSwap" /> </defaultCache> <cache name="query.Employee" maxEntriesLocalHeap="10000" eternal="false" timeToIdleSeconds="5" timeToLiveSeconds="10"> <persistence strategy="localTempSwap" /> </cache> <cache name="org.hibernate.cache.internal.StandardQueryCache" maxEntriesLocalHeap="5" eternal="false" timeToLiveSeconds="120"> <persistence strategy="localTempSwap" /> </cache> <cache name="org.hibernate.cache.spi.UpdateTimestampsCache" maxEntriesLocalHeap="5000" eternal="true"> <persistence strategy="localTempSwap" /> </cache> </ehcache>
log4j.properties:
log4j.rootLogger=error,CONSOLE ################### # Console Appender ################### log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender log4j.appender.CONSOLE.Target=System.out log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout log4j.appender.CONSOLE.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %5p (%c:%L) - %m%n log4j.logger.org.hibernate.cache=debug
实体类:
package com.tch.test.entity; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.Table; import org.hibernate.annotations.Cache; import org.hibernate.annotations.CacheConcurrencyStrategy; @Entity @Table(name = "EMPLOYEE") @Cache(usage=CacheConcurrencyStrategy.READ_ONLY) public class Employee { @Id @GeneratedValue @Column(name = "emp_id") private long id; @Column(name = "emp_name") private String name; @Column(name = "emp_salary") private double salary; public Employee(String name, double salary) { this.name = name; this.salary = salary; } public Employee() { super(); } public long getId() { return id; } public void setId(long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public double getSalary() { return salary; } public void setSalary(double salary) { this.salary = salary; } @Override public String toString() { return "Employee [id=" + id + ", name=" + name + ", salary=" + salary + "]"; } }
HibernateUtil工具类:
package com.tch.test.util; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; public class HibernateUtil { private static SessionFactory sessionFactory; private static SessionFactory buildSessionFactory() { try { Configuration configuration = new Configuration().configure("hibernate.cfg.xml"); SessionFactory sessionFactory = configuration.buildSessionFactory(); return sessionFactory; } catch (Throwable ex) { System.err.println("Initial SessionFactory creation failed." + ex); ex.printStackTrace(); throw new ExceptionInInitializerError(ex); } } public static SessionFactory getSessionFactory() { if(sessionFactory == null) sessionFactory = buildSessionFactory(); return sessionFactory; } }
测试类:
package com.tch.test; import java.util.Arrays; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.stat.Statistics; import com.tch.test.entity.Employee; import com.tch.test.util.HibernateUtil; public class HibernateEHCacheMain { public static void main(String[] args) { // saveData(HibernateUtil.getSessionFactory()); // Statistics stats = HibernateUtil.getSessionFactory().getStatistics(); // stats.setStatisticsEnabled(true); getData(HibernateUtil.getSessionFactory()); // printStats(stats, 1); getData(HibernateUtil.getSessionFactory()); // printStats(stats, 2); getData(HibernateUtil.getSessionFactory()); // printStats(stats, 3); getData(HibernateUtil.getSessionFactory()); // printStats(stats, 4); HibernateUtil.getSessionFactory().close(); } private static void getData(SessionFactory sessionFactory) { Session session = sessionFactory.openSession(); Transaction transaction = session.beginTransaction(); System.err.println("begin get data ..."); // session.createQuery("from Employee").list(); // session.createQuery("from Employee").setCacheable(true).setCacheRegion("query.Employee").list(); // ((Employee) session.load(Employee.class, 34l)).getName(); // session.createQuery("from Employee").list(); // System.out.println(session.createQuery("from Employee").setCacheable(true).list()); session.createQuery("from Employee").setCacheable(true).list(); transaction.commit(); } private static void saveData(SessionFactory sessionFactory) { Session session = sessionFactory.openSession(); Transaction transaction = session.beginTransaction(); Employee employee1 = new Employee("employee 1", 1000); Employee employee2 = new Employee("employee 2", 1000); Employee employee3 = new Employee("employee 3", 1000); Employee employee4 = new Employee("employee 4", 1000); session.save(employee1); session.save(employee2); session.save(employee3); session.save(employee4); transaction.commit(); } private static void printStats(Statistics stats, int i) { System.out.println("***** " + i + " *****"); System.out.println("Fetch Count=" + stats.getEntityFetchCount()); System.out.println("Second Level Hit Count=" + stats.getSecondLevelCacheHitCount()); System.out .println("Second Level Miss Count=" + stats .getSecondLevelCacheMissCount()); System.out.println("Second Level Put Count=" + stats.getSecondLevelCachePutCount()); } }
首先调用saveData()插入数据,然后调用getData()查询数据(是在不同的session中),会看的只有一条sql执行了,其他的都是从ehcache的缓存中读取的(根据log中的信息:caching query results in region: org.hibernate.cache.StandardQueryCache; timestamp=5862689108340736可以知道)
就说明二级缓存生效了。。。。
相关推荐
3. **整合 Hibernate 和 Ehcache**:整合 Hibernate 与 Ehcache 可以利用缓存机制来避免频繁的数据库查询,提高应用程序响应速度。通过在 Hibernate 配置文件中添加 Ehcache 配置,可以指定哪些实体或查询结果应该被...
在"Spring+Hibernate+ehcache整合"项目中,开发者已经完成了一个将这三个框架集成的基础工程。虽然Struts没有被明确提及,但通常在Web开发中,Spring与Struts结合可以构建更完整的MVC架构。这个整合项目可能包含以下...
【Spring3 Hibernate4 Ehcache整合实例详解】 在Java企业级应用开发中,Spring、Hibernate和Ehcache是三个非常重要的框架和技术。Spring作为轻量级的IoC(Inversion of Control)和AOP(Aspect Oriented ...
《深入理解Hibernate与Ehcache整合机制》 在Java企业级开发中,数据持久化是不可或缺的一环,而Hibernate作为一款强大的ORM(对象关系映射)框架,极大地简化了数据库操作。然而,随着应用程序规模的扩大,数据量的...
当Hibernate与Ehcache整合时,能够实现数据的快速访问,减少对数据库的直接访问,从而提高系统的响应速度。 **1. Hibernate概述** Hibernate是Java开发中的一个关键工具,它提供了一种在Java应用和关系型数据库之间...
在Spring Boot的基础上,我们常常会整合其他技术,如Hibernate和Ehcache,来构建高效的数据存储和缓存解决方案。Maven作为Java项目的构建工具,负责管理项目的依赖关系。在这个源码包中,我们将探讨如何将这些组件...
这篇博客“spring struts2 hibernate ehcache整合”显然探讨了如何将这四个组件集成到同一个项目中,以提升应用程序的性能和效率。以下是关于这些技术及其整合的关键知识点的详细说明: 1. **Spring框架**:Spring...
整合使用最新版本的三大框架(即Struts2、Spring4和Hibernate4),搭建项目架构原型。 项目架构原型:Struts2.3.16 + Spring4.1.1 + Hibernate4.3.6。 此外,还有:log4j、slf4j、junit4、ehcache等知识点。 项目...
1.通过google ehcache-spring-annotatios.jar自动注解方式实现整合Spring+Ehcache。 2.Action里通过struts2-spring-plugin.jar插件自动根据名字注入。 3.Ajax无刷新异步调用Struts2,返回Json数据,以用户注册为例。...
在Java后台开发中,Spring、Spring MVC、Hibernate和Ehcache是四个非常关键的框架,它们各自承担着不同的职责并协同工作,构建出高效、稳定且可扩展的应用系统。 Spring框架是Java企业级应用的核心框架,它提供了一...
《深入理解Hibernate与Ehcache整合》 在Java企业级开发中,Hibernate作为一种优秀的对象关系映射(ORM)框架,极大地简化了数据库操作。然而,随着应用规模的扩大,数据库的读写压力也随之增加,此时引入二级缓存就...
标题中的"jar包整合:Springmvc+hibernate+Ehcache+shiro+mysql+Oracle+fastjson"指的是一个综合性的Java项目,它集成了多种技术框架,用于构建高效、可扩展的Web应用。让我们逐一解析这些技术的核心知识点: 1. **...
通过以上步骤,我们可以有效地整合Hibernate和EhCache,实现高效的数据缓存处理,提升应用程序的性能和用户体验。在实际开发中,理解并熟练掌握这些知识点,能够帮助开发者构建出更加健壮、响应更快的系统。
Ehcache 是一个开源的缓存框架,提供了一个高性能的缓存解决方案,可以与 Hibernate 和 Spring 整合使用,以提高应用程序的性能。 缓存的重要性 在 Web 应用程序中,数据库访问是性能瓶颈之一。数据库访问需要消耗...
在本项目中,我们主要探讨的是一个基于Maven构建的Java Web应用,它整合了Spring 4、Hibernate 4、Apache Shiro以及Ehcache等多个关键框架,旨在实现用户角色菜单管理的功能。以下是对这些技术及其集成应用的详细...
在JavaWeb开发中,Spring、Spring MVC、Hibernate和Ehcache是四个非常关键的框架,它们共同构建了一个高效、灵活的后台系统。下面将详细解释这些框架的核心功能、使用场景以及它们之间的协作关系。 首先,Spring...
1.标题所提及技术的整合,Spring包括mvc、aop、ioc等。个人属于强迫症类型,技术水平怎么样再说,代码必须好看 2.Hibernate几个级别缓存对比。见DaoImpl类 3.Ehcache方法缓存及页面缓存。见applicationContext-cache...
Ehcache可以集成到Spring MVC和Hibernate中,用于缓存HTTP会话、数据库查询结果等,降低系统负载。 5. **即时通讯**:即时通讯(Instant Messaging,IM)功能通常指的是用户可以实时交流的应用或服务。在这个项目中...
这是一个整合了多个核心技术的Java Web开发资源包,涵盖了Spring 3、Hibernate 4、Struts 2、DBCP、MySQL、JSON、Ehcache以及DOM4J等组件。以下将详细解析这些技术及其在Web开发中的应用。 1. **Spring框架**:...
通过上述步骤,Ehcache 可以有效地整合到Spring环境中,实现页面和对象级别的缓存,从而显著提高应用程序的性能。同时,Ehcache的灵活性和扩展性使得它能够适应各种复杂的应用场景,满足不同项目的需求。