spring事物管理机制

来源:互联网 发布:算法的时间复杂度定义 编辑:程序博客网 时间:2024/06/05 11:25
[html] view plaincopyprint?
  1. Spring+Hibernate的实质:  
  2. 就是把Hibernate用到的数据源Datasource,Hibernate的SessionFactory实例,事务管理器HibernateTransactionManager,都交给Spring管理。  
  3.   
  4. 那么再没整合之前Hibernate是如何实现事务管理的呢?  
  5. 通过ServletFilter实现数据库事务的管理,这样就避免了在数据库操作中每次都要进行数据库事务处理。  
  6.   
  7.   
  8.   
  9.   
  10.   
  11. 一.事务的4个特性:  
  12.    原子性:一个事务中所有对数据库的操作是一个不可分割的操作序列,要么全做,要么全部做。  
  13.    一致性:数据不会因为事务的执行而遭到破坏。  
  14.    隔离性:一个事务的执行,不受其他事务(进程)的干扰。既并发执行的个事务之间互不干扰。  
  15.    持久性:一个事务一旦提交,它对数据库的改变将是永久的。  
  16.   
  17.   
  18.   
  19.   
  20. 二.事务的实现方式:  
  21. 实现方式共有两种:编码方式;声明式事务管理方式。  
  22.   
  23. 基于AOP技术实现的声明式事务管理,实质就是:在方法执行前后进行拦截,然后在目标方法开始之前创建并加入事务,执行完目标方法后根据执行情况提交或回滚事务。  
  24.   
  25. 声明式事务管理又有两种方式:基于XML配置文件的方式;另一个是在业务方法上进行@Transactional注解,将事务规则应用到业务逻辑中。  
  26.   
  27.   
  28.   
  29.   
  30. 三.创建事务的时机:  
  31.   
  32. 是否需要创建事务,是由事务传播行为控制的。读数据不需要或只为其指定只读事务,而数据的插入,修改,删除就需要事务管理了。  
  33.   
  34.   
  35.   
  36.   
  37.   
  38. 一种常见的事务管理配置:事务拦截器TransactionInterceptor和事务自动代理BeanNameAutoProxyCreator相结合的方式  
  39.   
  40.   
  41.  <!--定义Hibernate的事务管理器HibernateTransactionManager -->  
  42.     <bean id="transactionManager"   
  43.      class="org.springframework.orm.hibernate3.HibernateTransactionManager">  
  44.         <!-- 依赖注入上面定义的sessionFactory -->  
  45.         <property name="sessionFactory" ref="sessionFactory"/>  
  46.     </bean>  
  47.   
  48.   
  49.   
  50.   
  51.     <!--定义Spring的事务拦截器TransactionInterceptor -->  
  52.     <bean id="transactionInterceptor"      class="org.springframework.transaction.interceptor.TransactionInterceptor">  
  53.         <!--  依赖注入上面定义的事务管理器transactionManager -->  
  54.         <property name="transactionManager" ref="transactionManager"/>  
  55.         <!-- 定义需要进行事务拦截的方法及所采用的事务控制类型 -->       
  56.         <property name="transactionAttributes">             
  57.             <props>  
  58.                 <!-- 以browse、list、load、get及is开头的所有方法采用只读型事务控制类型 -->  
  59.                 <prop key="browse*">PROPAGATION_REQUIRED,readOnly</prop>  
  60.                 <prop key="list*">PROPAGATION_REQUIRED,readOnly</prop>  
  61.                 <prop key="load*">PROPAGATION_REQUIRED,readOnly</prop>  
  62.                 <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>  
  63.                 <prop key="is*">PROPAGATION_REQUIRED,readOnly</prop>  
  64.                 <!-- 所有方法均进行事务控制,如果当前没有事务,则新建一个事务 -->  
  65.                 <prop key="*">PROPAGATION_REQUIRED</prop>  
  66.             </props>  
  67.         </property>  
  68.     </bean>  
  69.       
  70.   
  71.   
  72.   
  73.     <!-- 定义BeanNameAutoProxyCreatorf进行Spring的事务处理-->  
  74.     <bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">  
  75.         <!--  针对指定的bean自动生成业务代理 -->  
  76.         <property name="beanNames">   
  77.             <list>  
  78.                 <value>adminService</value>  
  79.                 <value>columnsService</value>  
  80.                 <value>newsService</value>  
  81.                 <value>crawlService</value>  
  82.                 <value>memberLevelService</value>  
  83.                 <value>memberService</value>  
  84.                 <value>categoryService</value>  
  85.                 <value>merService</value>  
  86.                 <value>cartService</value>  
  87.                 <value>ordersService</value>  
  88.                 <value>trafficService</value>  
  89.             </list>  
  90.         </property>  
  91.         <!--  这个属性为true时,表示被代理的是目标类本身而不是目标类的接口 -->  
  92.         <property name="proxyTargetClass">  
  93.             <value>true</value>  
  94.         </property>  
  95.        <!--  依赖注入上面定义的事务拦截器transactionInterceptor -->  
  96.         <property name="interceptorNames">  
  97.             <list>  
  98.                 <value>transactionInterceptor</value>   
  99.             </list>  
  100.         </property>  
  101.     </bean>     
0 0