`

hibernate relative annotation

阅读更多
[size=large]
@TriggerRemove
Required Element Summary
	cacheName
Optional Element Summary
	keyGenerator
	keyGeneratorName
	removeAll

@TriggersRemove(cacheName = "sysCache", when = When.AFTER_METHOD_INVOCATION, removeAll = true)
@TriggersRemove - which can be applied to methods in order to trigger removal of a single element or optionally of all elements from one or more caches


@TriggersRemove 可以理解为数据库的触发器的作用

http://code.google.com/p/ehcache-spring-annotations/wiki/UsingTriggersRemove

使用ehcache-spring-annotations开启ehcache的注解功能
http://blog.csdn.net/glarystar/article/details/6637962

Spring 3.0.5的,更细颗粒化的缓存设置,更方便的注解,可以具体到把每个方式的返回值做缓存, 需要 ehcache-spring-annotations-1.1.x。
下载地址是:http://code.google.com/p/ehcache-spring-annotations
首先,applicationContext.xml
Xml代码  
1.
<beans xmlns="http://www.springframework.org/schema/beans"  
2.	 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
3.	 xmlns:aop="http://www.springframework.org/schema/aop"  
4.	 xmlns:context="http://www.springframework.org/schema/context"  
5.	 xmlns:p="http://www.springframework.org/schema/p"  
6.	 xmlns:tx="http://www.springframework.org/schema/tx"  
7.	 xmlns:ehcache="http://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring"  
8.	 xsi:schemaLocation="http://www.springframework.org/schema/beans   
9.	  http://www.springframework.org/schema/beans/spring-beans.xsd  
10.	  http://www.springframework.org/schema/aop   
11.	  http://www.springframework.org/schema/aop/spring-aop-3.0.xsd  
12.	  http://www.springframework.org/schema/context   
13.	  http://www.springframework.org/schema/context/spring-context-3.0.xsd  
14.	  http://www.springframework.org/schema/tx   
15.	  http://www.springframework.org/schema/tx/spring-tx-3.0.xsd  
16.	  http://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring     
17.	  http://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring/ehcache-spring-1.1.xsd">  
18.	  
19.	<ehcache:annotation-driven cache-manager="ehCacheManager" />   
20.	   
21.	 <bean id="ehCacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">    
22.	       <property name="configLocation" value="classpath:ehcache.xml" />    
23.	   </bean>   

其次,src下的ehcache.xml
Xml代码  
1.
<?xml version="1.0" encoding="UTF-8"?>  
2.	<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
3.	 xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"  
4.	 updateCheck="false">  
5.	 <diskStore path="java.io.tmpdir" />  
6.	 <defaultCache eternal="false"   
7.	   maxElementsInMemory="1000"  
8.	   overflowToDisk="false"   
9.	   diskPersistent="false"   
10.	   timeToIdleSeconds="0"  
11.	   timeToLiveSeconds="600"   
12.	   memoryStoreEvictionPolicy="LRU" />  
13.	  
14.	 <cache name="departCache"   
15.	   eternal="false"  
16.	   maxElementsInMemory="100"  
17.	   overflowToDisk="false"  
18.	   diskPersistent="false"   
19.	   timeToIdleSeconds="0"  
20.	   timeToLiveSeconds="300"  
21.	   memoryStoreEvictionPolicy="LRU" />  
22.	  
23.	</ehcache>  

DAO层缓存:例如下边这个方法的返回值需要缓存:

@SuppressWarnings("unchecked")
//spring 3 基于注解ehcache缓存配置;
@Cacheable(cacheName="departCache") 
public List<AppDepart> getChildDepart(Integer id) throws Exception { 
  return  this.getHibernateTemplate().find("from AppDepart  where state=1 and idParent="+id); 
} 

@Cacheable(cacheName="departCache") 加上这句话,其中cacheName 对应ehcache.xml  中的<cache name="departCache"
这样这个方法返回值就可以被缓存起来的了,但是怎么样把缓存数据和数据库中的数据实现同步呢?
如果对这个PO做update ,save,delete 可以实现这样策略如下:
@Transactional(propagation = Propagation.REQUIRED)
//设定spring的ecache缓存策略,当编辑机构时候,把缓存全部清除掉,以达到缓存那数据同步;
@TriggersRemove(cacheName="departCache",removeAll=true) 
public boolean editDepart(String depno, String depName) { 
  boolean flag = false; 
  try { 
   AppDepart depart = departDao.getAppdepart(depno); 
   depart.setDepName(depName); 
   departDao.update(depart); 
   flag = true; 
  } catch (Exception e) { 
   e.printStackTrace(); 
  } 
  return flag; 
} 


使用 @Cacheable
public interface WeatherDao {         public Weather getWeather(String zipCode);         public List<Location>findLocations(String locationSearch); } public class DefaultWeatherDao implements WeatherDao {        @Cacheable(cacheName="weatherCache")     public Weather getWeather(String zipCode) {         //Some Code     }         @Cacheable(cacheName="locationSearchCache")     public List<Location> findLocations(String locationSearch){         //Some Code     } }

<!-- spring配置文件 -->
  <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" 	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"	xmlns:ehcache="http://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring"	xsi:schemaLocation="http://www.springframework.org/schema/beans       http://www.springframework.org/schema/beans/spring-beans-3.0.xsd       http://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring       http://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring/ehcache-spring-1.1.xsd"> 	<ehcache:annotation-driven cache-manager="ehCacheManager" /> 	<bean id="ehCacheManager"		class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean" /> 	<bean id="weatherDao" class="x.y.service.DefaultWeatherDao" /> </beans>
<?xml version="1.0" encoding="UTF-8"?> <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"     xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd" updateCheck="false">     <!--      | Please see http://ehcache.sourceforge.net/documentation/configuration.html for      | detailed information on how to configurigure caches in this file      +-->     <!-- Location of persistent caches on disk -->     <diskStore path="java.io.tmpdir/EhCacheSpringAnnotationsExampleApp" />     <defaultCache eternal="false" maxElementsInMemory="1000"         overflowToDisk="false" diskPersistent="false" timeToIdleSeconds="0"         timeToLiveSeconds="600" memoryStoreEvictionPolicy="LRU"/>     <cache name="weatherCache" eternal="false"         maxElementsInMemory="100" overflowToDisk="false" diskPersistent="false"         timeToIdleSeconds="0" timeToLiveSeconds="300"         memoryStoreEvictionPolicy="LRU" />     <cache name="locationSearchCache" eternal="false"         maxElementsInMemory="100" overflowToDisk="false" diskPersistent="false"         timeToIdleSeconds="0" timeToLiveSeconds="300"         memoryStoreEvictionPolicy="LRU" /> </ehcache>
表1. <ehcache:annotation-driven/> 设置
Attribute	Default	Description
cache-manager	cacheManager	The bean name of the CacheManager that is to be used to drive caching. This attribute is not required, and only needs to be specified explicitly if the bean name of the desired CacheManager is not 'cacheManager'.
create-missing-caches	false	Should cache names from @Cacheable annotations that don't exist in the CacheManager be created based on the default cache or should an exception be thrown?
default-cache-key-generator	Not Set	Default CacheKeyGenerator implementation to use. If not specified HashCodeCacheKeyGenerator will be used as the default.
self-populating-cache-scope	shared	Are the SelfPopulatingCache wrappers scoped to the method or are they shared among all methods using each self populating cache.
proxy-target-class	false	Applies to proxy mode only. Controls what type of caching proxies are created for classes annotated with the@Cacheable annotation. If the proxy-target-class attribute is set to true, then class-based proxies are created. If proxy-target-class is false or if the attribute is omitted, then standard JDK interface-based proxies are created. (See Spring Reference Section 7.6, “Proxying mechanisms” for a detailed examination of the different proxy types.)
order	Ordered.LOWEST_PRECEDENCE	Defines the order of the caching advice that is applied to beans annotated with @Cacheable. (For more information about the rules related to ordering of AOP advice, see Spring Reference Section 7.2.4.7, “Advice ordering”.) No specified ordering means that the AOP subsystem determines the order of the advice.
@Cacheable设置
Property	Type	Description
cacheName	String	Required name of the cache to use
selfPopulating	boolean	Optional if the method should have self-populating semantics. This results in calls to the annotated method to be made within a EhCache CacheEntryFactory. This is useful for expensive shared resources that should be retrieved a minimal number of times.
keyGenerator	@KeyGenerator
Optional inline configuration of a CacheKeyGenerator to use for generating cache keys for this method.
keyGeneratorName	String	Optional bean name of a CacheKeyGenerator to use for generating cache keys for this method.
exceptionCacheName	String	Optional name of the cache to use for caching exceptions. If not specified exceptions result in nothing being cached. If specified the thrown exception is stored in the cache for the generated key and re-thrown for subsequent method calls as long as it remains in the exception cache.


spring用注解的方式使用ehcache方法
spring用注解的方式使用ehcache网上大多数介绍的方法是spring-modules的方法,现在spring-modules已经不再更新了,下面介绍一个比较好的开源软件:ehcache-spring-annotations。网站主页:http://code.google.com/p/ehcache-spring-annotations/。使用方法如下:
1、ehcache.xml
<?xml version=”1.0″ encoding=”UTF-8″?>
<ehcache xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”
xsi:noNamespaceSchemaLocation=”ehcache.xsd” updateCheck=”true”
monitoring=”autodetect”>
<diskStore path=”java.io.tmpdir/wimsweb/ehcache” />
<defaultCache maxElementsInMemory=”10000″ eternal=”false”
timeToIdleSeconds=”120″ timeToLiveSeconds=”120″ overflowToDisk=”false”
diskSpoolBufferSizeMB=”30″ maxElementsOnDisk=”10000000″
diskPersistent=”false” diskExpiryThreadIntervalSeconds=”120″
memoryStoreEvictionPolicy=”LRU” />
<cache name=”reportCache” maxElementsInMemory=”1000″ eternal=”true”
overflowToDisk=”true” />
</ehcache>

2、spring的bean配置:
<?xml version=”1.0″ encoding=”UTF-8″?>
<beans xmlns=”http://www.springframework.org/schema/beans” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xmlns:ehcache=”http://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring” xsi:schemaLocation=” http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring http://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring/ehcache-spring-1.1.xsd”></p>
<ehcache:annotation-driven cache-manager=”cacheManager” />
<bean id=”cacheManager”></p>
<property name=”configLocation”>
<value>classpath:ehcache.xml</value>
</property>
</bean>
</beans>

3、在使用的方法前面加上 @Cacheable(cacheName=”reportCache”):
@Cacheable(cacheName=”reportCache”)
public List getCapExpByDay(SearchForm form) throws BaseServiceException {</p>
if (form.getSupervisorUnit() != null) {
return getCapExpDayForSubSuper(form);
}else if(!StringUtils.isEmpty(form.getCity())){
return getCapExpDayForSubCity(form);
}else if(form.getProTypeId() != null ){
return getCapExpDayForSubType(form);
}
return getCapExpDayForInit(form);
}

注意:如果使用的参数是对象,那么需要重载这个对象的hashCode和equals方法,或者使用@Cacheable(cacheName=”weatherCache”, keyGenerator=@KeyGenerator(name=”StringCacheKeyGenerator”))进行注解。
keyGenerator参数有几种:HashCodeCacheKeyGenerator(默认值)、StringCacheKeyGenerator、ListCacheKeyGenerator、MessageDigestCacheKeyGenerator,具体参考http://code.google.com/p/ehcache-spring-annotations/wiki/CacheKeyGenerators。</p>
http://2018live.com/archives/164
[/size]
分享到:
评论

相关推荐

    hibernate 注解 annotation 教程

    hibernate 注解 annotation 教程

    Hibernate Annotation jar

    这里面包涵了需要用Hibernate Annotation时,所需要的所有jar包! 现在我们公司在做web项目的时候,已经不用*.hbm.xml这种映射文件了,都是用Annotation(注解)方式来完成实体与表之间的映射关系,这样看起来比用...

    hibernate-annotation 所需要的jar包

    在Java开发中,Hibernate与Annotation的结合使用极大地简化了数据持久化的复杂性,使得开发人员无需编写大量的SQL代码。下面将详细介绍Hibernate-Annotation所涉及到的知识点。 1. **Hibernate框架**: Hibernate是...

    hibernate-annotation

    《深入理解Hibernate注解》 Hibernate作为Java领域中的一款强大持久化框架,极大地简化了数据库操作。而Hibernate注解则是其在ORM(对象关系映射)领域的进一步进化,它允许开发者将元数据直接嵌入到Java类和属性的...

    hibernate-Annotation.jar

    在Hibernate 3.x版本中,引入了Annotation注解,这是一种元数据的方式,可以替代XML配置文件来描述对象与数据库表之间的映射关系。 **Hibernate Annotation注解** 在Hibernate 3.x之前,对象到数据库的映射通常...

    hibernate annotation中文文档

    hibernate annotation中文文档

    Hibernate-Annotation-3.4.0帮助文档

    《Hibernate-Annotation-3.4.0帮助文档》是一份详尽的指南,旨在帮助开发者理解和使用Hibernate ORM框架中的注解功能。Hibernate是Java领域中广泛使用的对象关系映射(ORM)工具,它极大地简化了数据库操作。在3.4.0...

    hibernate-annotation-helloword

    **hibernate-annotation-helloworld** 是一个基于Hibernate框架,使用注解方式实现的Hello World示例项目。在Java世界中,Hibernate是一个流行的持久层框架,它极大地简化了数据库操作,尤其是在对象关系映射(ORM)...

    Hibernate_annotation3.4_api.CHM

    Hibernate annotation 3.4 api CHM

    hibernate annotation hibernate3

    《Hibernate注解与Hibernate3深度解析》 在Java开发领域,Hibernate作为一种强大的对象关系映射(ORM)框架,极大地简化了数据库操作。本篇将深入探讨Hibernate 3版本中的注解使用,帮助开发者理解如何利用注解进行...

    Hibernate-Annotation中文教程.pdf

    Hibernate Annotation中文教程 Hibernate 是 Java 数据库持久性的事实标准之一,它非常强大、灵活,而且具备了优异的性能。传统上,Hibernate 的配置依赖于外部 XML 文件,而最近发布的几个 Hibernate 版本中,...

    Hibernate Annotation 中文文档

    **Hibernate Annotation 中文文档** 在Java的持久化框架中,Hibernate是一个非常重要的工具,它极大地简化了数据库操作。随着技术的发展,Hibernate Annotation逐渐成为主流,因为它提供了更直观、更简洁的方式来...

    Hibernate Annotation

    Hibernate Annotation

    hibernate 以Annotation方式配置在oracle和mysql

    hibernate 以Annotation方式配置在oracle和mysql hibernate,这里面提供了两个小例子,一个是配置跟oracle数据库相关联时的配置方法,一个是配置跟mysql数据库相关联时的配置方法。

    最全的Hibernate Annotation API文档

    在Hibernate中,注解(Annotation)是一种声明式的方法,用于配置实体类、属性以及它们与数据库表之间的映射关系。本文将深入探讨“最全的Hibernate Annotation API文档”中的关键知识点。 一、实体类(Entity) 在...

    Hibernate -annotation 学习笔记

    【Hibernate - Annotation 学习笔记】 Hibernate 是一个流行的开源Java对象关系映射(ORM)框架,它极大地简化了数据库操作,使得开发人员可以使用面向对象的方式处理数据存储。Annotation是Hibernate提供的一种元...

    Hibernate-Annotation初步.rar

    【标题】:“Hibernate-Annotation初步” 【描述】中提到的“Hibernate-Annotation”是指Hibernate框架中的一种元数据声明方式,它允许开发者通过在Java类和字段上直接使用注解(Annotation)来替代传统的XML配置...

    hibernate_annotation_所需jar包

    myeclipse的自带hibernate jar包不支持注解;自己找的hibernate注解所需的jar包:hibernate-core;hibernate-annotation;hbm-cfg-xml;log4j.properties

Global site tag (gtag.js) - Google Analytics