1.编程式事务:
1.1由程序员编程事务控制代码.
  1.2OpenSessionInView 就属于编程式事务: session.commit()和rollback()
2.声明式事务:
  2.1事务控制代码已经由spring 写好.程序员只需要声明出哪些方法需要进行事务控制和如何进行事务控制.
3.声明式事务都是针对于ServiceImpl 类下方法的. 4.事务管理器基于通知(advice)的.
5.在spring 配置文件中配置声明式事务

完整地XML配置文件信息:

<context:property-placeholder location="classpath:db.properties,classpath:second.pr operties"/>
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverMa nagerDataSource">
<property name="driverClassName" value="${jdbc.driver}"></property>
<property name="url" value="${jdbc.url}"></property>
<property name="username" value="${jdbc.username}"></property>
<property name="password" value="${jdbc.password}"></property>
</bean> <!-- spring-jdbc.jar 中 --> <bean id="txManager" class="org.springframework.jdbc.datasource.DataSour ceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean> <!-- 配置声明式事务 --> <tx:advice id="txAdvice" transaction-manager="txManager"> <tx:attributes> <!-- 哪些方法需要有事务控制 -->
<!-- 方法以ins 开头事务管理 -->
<tx:method name="ins*" />
<tx:method name="del*" />
<tx:method name="upd*" />
<tx:method name="*" />
</tx:attributes> </tx:advice> <aop:config> <!-- 切点范围设置大一些 --> <aop:pointcut expression="execution(* com.bjsxt.service.impl.*.*(..))"
id="mypoint" /> <aop:advisor advice-ref="txAdvice" pointcut-ref="mypoint" />
</aop:config>

声明式事务中的相关属性(tx:advice的标签)

  1. name=”” 哪些方法需要有事务控制

    1.1 支持*通配符

2.readonly=”boolean” 是否是只读事务.

  2.1 如果为 true,告诉数据库此事务为只读事务.数据化优化,会对性能有一定提升,所以只要是查询(select)的方法,建议使用此数据.

  2.2 如果为 false(默认值),事务需要提交的事务.建议新增,删除,修改.

3.propagation 控制事务传播行为

  3.1 定义: 当一个具有事务控制的方法被另一个有事务控制的方法调用后,需要如何管理事务(新建事务?在事务中执行?把事务挂起?报异常?)

  3.2 REQUIRED (默认值): 如果当前有事务,就在事务中执行,如果当前没有事务,新建一个事务.

  3.3 SUPPORTS:如果当前有事务就在事务中执行,如果当前没有事务,就在非事务状态下执行.

  3.4 MANDATORY: mandatory ,必须在事务内部执行,如果当前有事务,就在事务中执行,如果没有事务,报错.

  3.5 REQUIRES_NEW:必须在事务中执行,如果当前没有事务,新建事务,如果当前有事务,把当前事务挂起.

  3.6 NOT_SUPPORTED:必须在非事务下执行,如果当前没有事务,正常执行,如果当前有事务,把当前事务挂起(保证事务的独立&&被回滚).

  3.7 NEVER:必须在非事务状态下执行,如果当前没有事务,正常执行;

如果当前有事务,报错.

  3.8 NESTED:必须在事务状态下执行.如果没有事务,新建事务,如果当前有事务,创建一个嵌套事务.

4.isolation=”xxx事务隔离级别

  4.1 定义:在多线程或并发访问下如何保证访问到的数据具有完整性的/合法的/对的.

  4.2 脏读:

    4.2.1 一个事务(A)读取到另一个事务(B)中未提交的数据(暂存在缓存中的未提交到数据库的数据),另一个事务中数据可能进行了改变,此时A 事务读取的数据可能和数据库中数据是不一致的,此时认为数据是脏数据,读取脏数据过程叫做脏读.

  4.3 不可重复读:

    4.3.1 主要针对的是某行数据.(或行中某列)

    4.3.2 主要针对的操作是修改操作.

    4.3.3 两次读取在同一个事务内

    4.3.4 当事务A 第一次读取事务后,事务B 对事务A 读取的数据进行修改,事务 A 中再次读取的数据和之前读取的数据不一致,过程不可重复读.

4.4 幻读:

  4.4.1 主要针对的操作是新增或删除

  4.4.2 两次事务的交叉处理的结果.

  4.4.3 事务A 按照特定条件查询出结果,事务B 新增了一条符合条件的数据.事务 A 中查询的数据和数据库中的数据不一致的,A 好像出现了幻觉,这种情况称为幻读.

4.5 DEFAULT: 默认值,由底层数据库自动判断应该使用什么隔离界别

4.6 READ_UNCOMMITTED: 可以读取未提交数据,可能出现脏读,不重复读,幻读.

  4.6.1 效率最高.

4.7 READ_COMMITTED:只能读取其他事务已提交数据.可以防止脏读,可能出现不可重复读和幻读.

4.8 REPEATABLE_READ: 读取的数据被添加锁,防止其他事务修改此数据,可以防止不可重复读.脏读,可能出现幻读.

4.9 SERIALIZABLE: 排队操作,对整个表添加锁.一个事务在操作数据时,另一个事务等待事务操作完成后才能操作这个表.

  4.9.1 最安全的,银行,金融类;

  4.9.2 效率最低的.

5.rollback-for=”异常类型全限定路径”  (java.lang.Exception)

  5.1 当出现什么异常时需要进行回滚

  5.2 建议:给定该属性值.

    5.2.1 手动抛异常一定要给该属性值,throw new Exception();

6.no-rollback-for=””

  6.1 当出现什么异常时不滚回事务.

Spring -12 -声明式事务及完整的XML配置文件信息 -声明式事务中的相关属性(tx:advice的标签)的更多相关文章

  1. Spring框架[一]——spring概念和ioc入门(ioc操作xml配置文件)

    Spring概念 spring是开源的轻量级框架(即不需要依赖其他东西,可用直接使用) spring核心主要两部分 aop:面向切面编程,扩展功能不是修改源代码来实现: ioc:控制反转,比如:有一个 ...

  2. Spring XML配置文件无法自动提示 eclipse中XML配置文件open with打开方式选择 XML Editor:注意它的编辑方式也是有两种的design和source

    双击XML配置文件,如果打开方式不正确 则如下图: 都是灰色显示,不会有自动提示,也不会有颜色标注 右击XML配置文件,选择打开方式为XML Editor,则会有颜色标注 如果此时没有自动提示 则要手 ...

  3. 【Spring】的【bean】管理(XML配置文件)

    Bean实例化的三种方式 说明:通过配置文件创建对象就称为Bean实例化. 第一种:使用类的无参构造创建(重点) 实体类 package com.tyzr.ioc; public class User ...

  4. 【Spring】的【bean】管理(XML配置文件)【Bean实例化的三种方式】

    Bean实例化的三种方式 说明:通过配置文件创建对象就称为Bean实例化. 第一种:使用类的无参构造创建(重点) 实体类 package com.tyzr.ioc; public class User ...

  5. Spring的xml配置文件中约束的必要性 找不到元素 'beans' 的声明

    今天在复习Spring MVC框架的时候,只知道xml配置文件中的约束有规范书写格式的作用,所以在配置HandlerMapping对象信息的时候没有加入约束信息之后进行测试,没有遇到问题.后来在配置S ...

  6. Spring_使用XML文件的方式配置事务

    步骤: 正常配置jdbctemplate 正常配置bean 配置事物管理器 配置事物管理器 配置aop切入点,通过切入点把事物链接起来 思路: 接着上一个买书的例子吧,直接拷到新包下,把注解都干掉,需 ...

  7. spring boot 读取配置文件(application.yml)中的属性值

    在spring boot中,简单几步,读取配置文件(application.yml)中各种不同类型的属性值: 1.引入依赖: <!-- 支持 @ConfigurationProperties 注 ...

  8. Spring 事务配置管理,简单易懂,详细 [声明式]

    Spring 事务配置说明 Spring 如果没有特殊说明,一般指是跟数据存储有关的数据操作事务操作:对于数据持久操作的事务配置,一般有三个对象,数据源,事务管理器,以及事务代理机制: Spring ...

  9. Spring Boot 揭秘与实战(二) 数据存储篇 - 声明式事务管理

    文章目录 1. 声明式事务 2. Spring Boot默认集成事务 3. 实战演练4. 源代码 3.1. 实体对象 3.2. DAO 相关 3.3. Service 相关 3.4. 测试,测试 本文 ...

随机推荐

  1. Java之浮点数运算

    浮点数运算和整数运算相比,只能进行加减乘除这些数值运算,不能做位运算和移位运算. 在计算机中,浮点数虽然表示的范围很大,但是浮点数有个非常重要的特点,就是浮点数常常无法精确表示 举例 浮点数0.1在计 ...

  2. LeetCode,3. 无重复字符的最长子串

    看了各位大神的,真是难堪,尤其是各种c++动不动就击败99%...我用python,换了三次算法,改了十几次bug,才击败5%....贴出来纪念下吧. 题目如下: 给定一个字符串,请你找出其中不含有重 ...

  3. 【视频开发】ffmpeg实现dxva2硬件加速

    这几天在做dxva2硬件加速,找不到什么资料,翻译了一下微软的两篇相关文档.这是第二篇,记录用ffmpeg实现dxva2. 第一篇翻译的Direct3D device manager,链接:http: ...

  4. Spring的日志管理

    一.spring的日志依赖 Logging是spring中唯一强制的外部依赖,spring中默认使用的日志是commons-logging,简称JCL,这里说的强制性,是因为在spring-core这 ...

  5. 下载 m3u8 直播流的方法

    下载 FFmpeg http://ffmpeg.org/download.html 查找直播流地址 找到目标视频对应的 m3u8 播放列表. 执行脚本 ffmpeg -i https://nhkmov ...

  6. Kafka压测— 搞垮kafka的方法(转)

    分布式系统故障场景梳理方法: 场景梳理逻辑关系: 单点硬件故障→单点进程故障类型→集群影响→集群故障场景 第三方依赖故障→集群依赖关系→集群影响→集群故障场景 业务场景→集群负载/错误影响→集群故障场 ...

  7. day30——socket套接字(完全版)

    day30 基于TCP协议的socket循环通信 server import socket phone = socket.socket() phone.bind(("127.0.0.1&qu ...

  8. AS3灰色图像

    一开始觉得AS3的滤镜很难使用,尤其是那些矩阵,让人望而生畏.最近写一个聊天模块,要用到离线状态下的灰色头像,于是认真研究了ColorMatrixFilter,发现其实也没有那么难.所谓的矩阵其实就是 ...

  9. Oracle 11g安装过程工作Oracle数据库安装图解

    一.Oracle 下载 注意Oracle分成两个文件,下载完后,将两个文件解压到同一目录下即可. 路径名称中,最好不要出现中文,也不要出现空格等不规则字符. 官方下地址: oracle.com/tec ...

  10. nginx配置http静态站点服务器

    1.  系统环境Windows 10 2.  设置静态站点目录,注意不要出现中文(这里踩了很多坑,可以查看错误日志error.log, “No mapping for the Unicode char ...