声明式事物

7 篇文章 0 订阅

   声明式事务

事务是一组逻辑操作要么同时成功,要么同时失败.
声明式事务和编程式事务是spring对事物管理的两种类型,在事务管理上可以将事务写到bean中,精确控制事务的边界;也可以通过一个切面来声明,将事务放在一个上下环境变量中,只需用注解和XML配置来管理事务。

Spring对声明式事务的支持实际上是spring的aop框架的一个实现。Aop显然很适合来实现声明式事务管理,因为事务是系统级的服务,应该是在应用程序主功能的上面一层。你可以把spring的事务认作是包装了一个方法的切面。


Spring操作事务的API

PlatformTransactionManager:平台事务管理器.真正管理事务的对象.会在SpringJDBC或者Ibatis进行持久化数据时候使用.

TransactionDefinition:事务定义信息(隔离级别,传播行为,超时信息,是否只读)

TransactionStatus:事务的状态,记录事务的状态.

以下是通过xml文件进行事务的管理:
   <!-- 配置事务管理器 -->
    
< beanid="txManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager" >
         < propertyname="dataSource"ref="dataSource" />
     </ bean >

<!--配置事务的增强 -->
<tx:adviceid="txAdvice"transaction-manager="transactionManager">
<
tx:attributes>

<tx:methodname="transfer"propagation="REQUIRED"/>
</
tx:attributes>
</
tx:advice>

 <!-- the transactional advice (what 'happens'; see the <aop:advisor/> bean
        below) 事务传播特性配置 -->
    
<tx:adviceid="txAdvice"transaction-manager="txManager">
        <!-- the transactional semantics... -->
        
<tx:attributes>

  <!--

  isolation="DEFAULT" 隔离级别
  propagation="REQUIRED" 传播行为
  read-only="false" 只读
  timeout="-1" 过期时间
  rollback-for="" -Exception
  no-rollback-for="" +Exception
  -->

            <tx:methodname="add*"propagation="REQUIRED"isolation="DEFAULT"
                       rollback-for="java.lang.Exception"
/>
            <tx:methodname="save*"propagation="REQUIRED"isolation="DEFAULT"
                       rollback-for="java.lang.Exception"
/>
            <tx:methodname="insert*"propagation="REQUIRED"isolation="DEFAULT"
                       rollback-for="java.lang.Exception"
/>
            <tx:methodname="update*"propagation="REQUIRED"isolation="DEFAULT"
                       rollback-for="java.lang.Exception"
/>
            <tx:methodname="modify*"propagation="REQUIRED"isolation="DEFAULT"
                       rollback-for="java.lang.Exception"
/>
            <tx:methodname="delete*"propagation="REQUIRED"isolation="DEFAULT"
                       rollback-for="java.lang.Exception"
/>

            <!-- 查询方法 -->
            
<tx:methodname="query*"read-only="true"/>
            <tx:methodname="select*"read-only="true"/>
            <tx:methodname="find*"read-only="true"/>
        </tx:attributes>
    </tx:advice>
还可以通过注解来做Spring的声明式事务: 

1:配置事务管理器:

 <beanid="txManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

        <propertyname="dataSource"ref="dataSource"/>
    </bean>

2:开启事务管你的注解:

  <tx:annotation-driverntransaction-manager="transactionManager"/>

3:在使用事务的类上添加一个注解:@Transactional即可  

Spring配置声明式事务如何实现?

是通过使用内置 TransactionProxyFactoryBean 为目标对象创建AOP代理对象,通过指定TransactionManager对目标对象的方法添加事务管理操作 .TransactionProxyFactoryBean参考一个方法的事务的属性来决定怎样管理那个方法上的事务策略。但是TransactionProxyFactoryBean从哪里得到一个方法的事务属性的呢。如你所见,TransactionProxyFactoryBean有一个transactionAttributeSourceproperty。这个property就代表着一个TransactionAttributeSource的实例。一个TransactionAttributeSource就是作为一个引用来查找设置在方法上的事务属性的。

欢迎阅读,要是哪里有误,还请路过的大神不吝赐教呀!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值