Hibernate+Spring整合使用二级缓存
1.选择缓存的实现 我们一般选择轻量级的EHCache,在hibernate.cft.xml里面的<session-factory>里面配置如下
?
- <!--选择缓存实现-->??
- <property?name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property>??
- <!--开启使用二级缓存-->??
- ?<property?name="hibernate.cache.use_second_level_cache">true</property>??
- ?
- ?
?或者已经把hibernate整合到spring中去的,在spring的配置文件applicatioContext.xml中配置如下
?
- <property?name="hibernateProperties">?
- ????????????<props>?
- ????????????????<!--此处用来定义hibernate的SessionFactory的属性:?????
- ????????????????????不同数据库连接,启动时选择create,update,create-drop-->?
- ????????????????<prop?key="hibernate.dialect">?
- ????????????????????org.hibernate.dialect.MySQL5Dialect?
- ????????????????</prop>?
- ????????????????<prop?key="hibernate.hbm2ddl.auto">update</prop>?
- ????????????????<prop?key="hibernate.cache.provider_class">?
- ????????????????????org.hibernate.cache.EhCacheProvider?
- ????????????????</prop>?
- ????????????????<!--?开启使用二级缓存?-->?
- ????????????????<prop?key="hibernate.cache.use_second_level_cache">true</prop>?
- ????????????????<!--?使用查询缓存?-->?
- ????????????????<prop?key="hibernate.cache.use_query_cache">true</prop>?
- ????????????</props>?
- ????????</property>?
2,选择在相应的映射文件中或者说在对相应的表进行操作时使用二级缓存并指定缓存的策略,例如指定缓存策略为?? read-write;
?
- <?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.bbs.entity">?
- ??<class?name="User">?
- ??????<cache?usage="read-write"/>?
- ???
- ?????<id?name="user_id">?
- ????????<generator?class="identity"></generator>?
- ?????</id>?
- ?????<property?name="user_name"></property>?
- ?????<property?name="user_password"></property>?
- ?????<property?name="user_mailbox"></property>?
- ?????<property?name="user_image"></property>?
- ?????<property?name="user_register_date"></property>?
- ?????<property?name="user_articles"></property>?
- ??</class>?
- </hibernate-mapping>?
3,在类路径下面进行EHCache的配置,建立ehchache.xml配置缓存的参数。
- <ehcache>?
- ????<diskStore?path="java.io.tmpdir"?/>?
- ????<defaultCache?maxElementsInMemory="10000"?eternal="false"?
- ????????timeToIdleSeconds="120"?timeToLiveSeconds="120"?overflowToDisk="true"?
- ????????diskPersistent="false"?diskExpiryThreadIntervalSeconds="120"?
- ????????memoryStoreEvictionPolicy="LRU"?/>?
- </ehcache>?
4.别忘了加相应的包:spring-framework-2.5.6\lib\ehcache\ehcache-1.5.0.jar 还有依赖包spring-framework-2.5.6\lib\concurrent\backport-util-concurrent.jar。
配置完成了,不过我的数据库没设计好,昨天晚上一直是“too many connections”或者直接“out of memory”,现在考虑是用二级缓存,这种情况很少出现,不过提升的不是很高。
?