spring 声明性事务
来源:互联网 发布:完美游戏平台网络错误 编辑:程序博客网 时间:2024/06/07 10:05
事务
全有全无的操作被称为事务
ACID
Atom
原子性:保证事务中的所有操作全部发生或者全部不发生。
Consistent
一致性:一旦事务完成,不论成功或者失败,系统必须保证所建模的业务处于一致性状态。
现实的数据不应该被损坏。
Isolated
隔离性:事务允许多个用户对相同的数据进行操作,每个用户的操作不会同其他用户的纠缠在一起。
隔离性往往涉及到锁定数据库中的行或者表。
Durable
持久性:一旦事务完成,事务的结果应该持久化,这样就能从任何系统崩溃中恢复过来。
一般会将结果存放到数据库,或者其他形式的持久化存储中。
声明性事务的属性
传播行为
具体见:org.springframework.transaction.TransactionDefinition
7种
如果事务不存在,则会抛出异常。 PROPAGATION_NESTED 表示如果当前已经存在一个事务,那么该方法将在嵌套事务中运行。
嵌套的事务可以独立于当前事务进行进行独立的提交和回滚。
如果当前事务不存在,则会启动一个新的事务。类似于PROPAGATION_REQUIRED。 PROPAGATION_NEVER 表示该方法不应该在事务中运行。
如果在事务中运行,则会抛出异常。 PROPAGATION_NOT_SUPPORTED 表示该方法不应该运行在事务中。
如果存在当前事物的话,在该方法运行期间,当前事务将被挂起。 PROPAGATION_REQUIRED 表示当前方法必须运行在事务当中。
如果当前事务存在,该方法在当前事务中运行。
如果当前不存在事务,则会启动一个新的事务。 PROPAGATION_REQUIRES_NEW 表示当前方法必须运行在它自己的事务当中,一个新的事务将会启动。
如果当前事务存在,则在方法执行期间,该事务会被挂起。 PROPAGATION_SUPPORTS 表示该方法不要求运行在事务中。
如果当前存在事务,则该方法会在该事务中运行。
隔离级别
无隔离措施可能出现的问题:
脏读 Dirty read
发生在一个事务读取了另一个事务改写但未提交的数据。如果改写稍后被回滚了,那么事务读取的数据就是无效的。
不可重复读 Norepeatable read
不可重复读发生在一个事务执行相同的查询两次及两次以上,但是每次都得到不同的数据时。
可能的原因:另一个并发事务在两次查询期间更新了数据。
幻读 Phantom read
与不可重复读类似。发生在一个事务t1读取了几行数据,接着另外一个并发事务t2插入了一些数据时。在随后的查询中,事务t1会发现多了一些原本不存在的记录。
可能导致脏读、不可重复读和幻读。 ISOLATION_READ_COMMITED 允许读取并发事务已经提交的数据。
能避免脏读,但是不可重复读和幻读仍有可能发生。 ISOLATION_REPEATABLE_READ 对同一字段的多次读取结果是一致的,除非数据是被本事务自己修改的。
能避免脏读、不可重复读,但是幻读仍然有可能发生。 ISOLATION_SERIALIZABLE 完全服从ACID的隔离级别。
能避免脏读、不可重复读和幻读。
通常是通过锁定事务相关的数据库表来实现的。
隔离级别具体见:org.springframework.transaction.TransactionDefinition
事务超时
事务执行时间超过超时时间,事务会失败,进行回滚。
是否只读
若只需要读数据库,数据库可以利用事务的只读属性进行一些优化。
回滚规则
默认情况:
运行时异常,回滚;
检查型异常,不回滚。
可以设置需要进行回滚的异常,和不需要回滚的异常
声明性事务配置
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd"><tx:annotation-driven transaction-manager="txManager"/></beans>
0 0
- spring 声明性事务
- Spring 声明式事务的传播性
- Spring声明事务方法
- spring声明式事务
- Spring---声明式事务
- Spring声明式事务
- Spring声明式事务
- spring 声明式事务
- spring声明事务配置
- 声明式事务 spring
- Spring声明式事务
- Spring声明式事务
- spring 声明式事务
- Spring声明式事务
- Spring 声明式事务
- Spring声明式事务
- Spring声明式事务
- spring声明式事务
- caffe上手教程-心得
- DAO 与工作簿连接和查询
- Java 异常 介绍
- python3 内置函数
- struts2工作原理
- spring 声明性事务
- 我是程序员
- c#判断程序运行环境的位数
- x86架构——内存管理
- 【BZOJ】1015: [JSOI2008]星球大战starwar
- 大话设计模式-第一章 简单工厂模式
- Android中自定义ScrollView的滑动监听事件,并在滑动时渐变标题栏背景颜色
- 接口层在重构中的作用
- Dlib+VS2017配置