zoukankan      html  css  js  c++  java
  • Spring中事务的XML方式[声明方式]

    事务管理: 管理事务,管理数据,数据完整性和一致性

    事务[业务逻辑] : 由一系列的动作[查询书价格,更新库存,更新余额],组成一个单元[买书业务],

    当我们动作当中有一个错了,全错~

    ACID

    原子性 隔离性 一致性 持久性

       

    注解方式配置事务[编程方式-->@代码]

    1.Spring框架当中需要配置事务管理器--> JDBC[Mybatis] Hibernate JTA-->数据源

    2.启动事务注解[特意说了,事务管理器的id]

    3.事务注解--> 可以放置的位置:@Transaction 类或者方法上

    1. 类上放置注解 方法当中注解[reaonly=true]
    2. rollbakFor
    3. 传播性 7个 默认值

    XML方式配置事务

    <!--声明方式XML方式:完成事务的配置,需要使用到地方有AOP-->
    <!-- 配置事务管理器 -->
    
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    
    <property name="dataSource" ref="dataSource"/>
    
    </bean>
    
    <!-- 定义哪些方法需要被事务管理器进行管理 -->
    
    <tx:advice id="serviceMethodAdvice" transaction-manager="transactionManager">
    
    <tx:attributes>
    
    <tx:method name="*" read-only="true"/>
    
    </tx:attributes>
    
    </tx:advice>
    
    <!-- 需要哪些方法是被监控,并且是有事务管理 -->
    
    <aop:config>
    
    <aop:pointcut expression="execution(* com..service.*Service.*(..))" id="servicePointCut"/>
    
    <!-- 代表的意思: service包下的说有类以Service结尾的类下的所有方法,都为只读状态 -->
    
    <aop:advisor advice-ref="serviceMethodAdvice" pointcut-ref="servicePointCut"/>
    
    </aop:config>

    单元测试,推荐使用断言方式,需要再使用syso(alt+/)的输出方式

    <!-- 定义哪些方法需要被事务管理器进行管理 -->
    
    <tx:advice id="serviceMethodAdvice" transaction-manager="transactionManager">
    
    <tx:attributes>
    
    <!-- 约定大于配置 -->
    
    <!-- 第一种配置方式
    
    <tx:method name="*" read-only="true"/>
    
    <tx:method name="add*" propagation="REQUIRED"/>
    
    <tx:method name="insert*"/>
    
    <tx:method name="create*"/>
    
    <tx:method name="update*"/>
    
    <tx:method name="edit*"/>
    
    <tx:method name="mod*"/>
    
    <tx:method name="change*"/>
    
    <tx:method name="del*"/>
    
    <tx:method name="remove*"/>
    
    <tx:method name="cancel*"/>
    
    -->
    
    <!-- 第二种配置方式 -->
    
    <tx:method name="*" read-only="false" />
    
    <tx:method name="get*" read-only="true"/>
    
    <tx:method name="load*" read-only="true"/>
    
    <tx:method name="list*" read-only="true"/>
    
    <tx:method name="find*" read-only="true"/>
    
    <tx:method name="sel*" read-only="true"/>
    
    <tx:method name="query*" read-only="true"/>
    
    </tx:attributes>
    </tx:advice>

    在这里想说的,帮助文档一定要看的!

    重点: 绝对是个人的建议 
     
    RuntimeException默认是不受审查,也是rollBackFor的默认值,如果你再Service层或者Dao层对其进行捕获的话,那么一定要做处理
    
    个人的建议为: service和Dao不管遇到什么请求你都处理往外抛, 处理都放置在Controller 关于异常尽量都是用继承RuntimeException,根据你的代码情况进行不同异常的封装
     
  • 相关阅读:
    Visual Studio 2005 Starter Kits
    怎样去做才是朋友?
    C#读写日志文本文件
    [文摘20080707]马云追加投资20亿 淘宝首定10年超沃尔玛目标
    [转]在WinForm应用程序中实现自动升级
    [转]官方Flash CS3简体中文帮助文档下载,AS3.0简体中文帮助文档下载
    [引]MySQL INNODB类型表的外键关联设置
    [转]winfrom让弹出的MessageBox在指定时间内自动销毁
    生活开心一笑 之 "我家半"与"QQ病毒"
    [English20080721]疯狂英语365句
  • 原文地址:https://www.cnblogs.com/lusid/p/5482124.html
Copyright © 2011-2022 走看看