spring事务管理1

事务管理的方式:编程式和声明式,spring推荐使用后一种方式。

 事务管理的原理:Aop为普通java类封装事务控制,它是通过动态代理实现的,spring在这段时间内通过拦截器,加载事务切片。由于Aop的原理是动态加载(回去研究一下proxy动态加载)来进行事务控制的。

事务管理的步骤(以hibernate为例):

1.定义一个hibernate适用的事务管理器,将SessionFactory注入进去:

<bean id="transactionManager" class="org.springframework.orm.hibernate.HibernateTransactionManager">
      <property name="sessionFactory">
         <ref bean="sessionFactory"/>
      </property>
</bean>
2.定义事务管理的策略:
<bean id="transactionAttributeSource" class="org.springframework.transaction.interceptor.NameMatchTransactionAttributeSource">
      <property name="properties">
         <props>
            <prop key="add">
               PROPAGATION_REQUIRES_NEW
            </prop>
         </props>
      </property>
   </bean>
还可以定义事务隔离程度和回滚
3.定义一个事务管理器(动态加载来实现的)
<bean id="studentManager" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
      <property name="target">
         <ref bean="studentManager"/>
      </property>
      <property name="transactionManager">
         <ref bean="transactionManager"/>
      </property>
      <property name="transactionAttributeSource">
         <ref bean="transactionAttributeSource"/>
      </property>
</bean>

这个bean的外观是一个接口(StudentManagerInterface),我们指出了它的具体实现(studentManager),而且为它绑定了事务策略
附A pring中的所有事务策略

  • PROPAGATION_REQUIRED--支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。
  • PROPAGATION_SUPPORTS--支持当前事务,如果当前没有事务,就以非事务方式执行。
  • PROPAGATION_MANDATORY--支持当前事务,如果当前没有事务,就抛出异常。
  • PROPAGATION_REQUIRES_NEW--新建事务,如果当前存在事务,把当前事务挂起。
  • PROPAGATION_NOT_SUPPORTED--以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
  • PROPAGATION_NEVER--以非事务方式执行,如果当前存在事务,则抛出异常。


附B Spring中所有的隔离策略:

ISOLATION_DEFAULT
ISOLATION_READ_UNCOMMITED
ISOLATION_COMMITED
ISOLATION_REPEATABLE_READ
ISOLATION_SERIALIZABLE
AOP应用范围

Authentication 权限
Caching 缓存
Context passing 内容传递
Error handling 错误处理
Lazy loading 懒加载
Debugging  调试
logging, tracing, profiling and monitoring 记录跟踪 优化 校准
Performance optimization 性能优化
Persistence  持久化
Resource pooling 资源池
Synchronization 同步
Transactions 事务

典型的hibenrnate事务管理


<!-- Hibernate SessionFactory -->
<bean id="sessionFactory“   class="org.springframework.orm.hibernate.LocalSessionFactoryBean">
                <property name="dataSource"><ref local="dataSource" /></property>
                <property name="mappingResources">
                        <list><!-- Add list of .hbm.xml files here -->
                                <value>org/mzone/model/Tuser.hbm.xml</value>
                                <value>org/mzone/model/Article.hbm.xml</value>
                        </list>
                </property>
                <property name="hibernateProperties">
                        <props>
                                <prop         key="hibernate.dialect">net.sf.hibernate.dialect.SybaseDialec</prop>
                                <prop key="hibernate.show_sql">True</prop>
                        </props>
                </property>
        </bean>

<!-- Transaction manager for a single Hibernate SessionFactory (alternative to JTA) -->
        <bean id="transactionManager"
                class="org.springframework.orm.hibernate.HibernateTransactionManager">
                <property name="sessionFactory"><ref local="sessionFactory" /></property>
        </bean>        
        <bean id="baseTxProxy" lazy-init="true"         class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
        <property name="transactionManager"><ref bean="transactionManager"/></property>
           <property name="target">
                   <ref local=" userManagerTarget " />
            </property>
        <property name="transactionAttributes">
            <props>
                            <prop key="save*">PROPAGATION_REQUIRED</prop>
                        <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
                        <prop key="remove*">PROPAGATION_REQUIRED</prop>
                        <prop key="*">PROPAGATION_REQUIRED</prop>
            </props>
        </property>
    </bean>
    <bean id="userManagerTarget" class="org.mzone.service.impl.UserManagerImpl">
        <property name="userDAO"><ref local="userDAO"/></property>
        <property name="articleDao"><ref local="articleDAO"/></property>
    </bean>
userDAO和articleDao是接口
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值