spring事务管理一:关于事务管理的接口
2016-06-02 00:00
274 查看
摘要: spring 事务管理
spring事务管理主要有三个接口:
事务管理器接口:PlatformTransactionManager。可以为不同的框架提供不同的实现,包括Spring JDBC、iBatis、Hibernate(有版本限制,3.0以上,spring版本更高时需要更高版本)、JPA、Jdo、JTA
事务定义接口:TransactionDefinition。包括设置隔离级别(ISOLATION)、传播行为(PROPAGATION)、超时信息(TIMEOUT)、只读参数(READONLY)。
事务状态接口:TransactionStatus。获取事务具体的状态。
详细:
关于事务隔离级别,有5种。分别是:
ISOLATION_DEFAULT,默认隔离级别,也就是根据数据的默认隔离级别,不同的数据库的隔离级别也不尽相同。
ISOLATION_READ_UNCOMMITTED,级别最低的隔离级别。允许读取其他还未提交但已改变的数据,可导致脏读、幻读、不可重复读等异常
ISOLATION_READ_COMMITTED,提交隔离级别。允许读取其他已经提交的数据,可防止脏读,但可能出现幻读、不可重复读
ISOLATION_REPEATABLE_READ,更高级别的隔离。对相同字段的多次读取是一致的,可防止脏读、不可重复读,但可能出现幻读
ISOLATION_SERIALIZABLE,级别最高的隔离。采用锁的方式进行事务操作,可以防止脏读、幻读、不可重复读,但随之而来的付出的时间和性能代价也更大
关于事务传播行为,事务传播行为主要是用来解决业务层对事务的调用问题,有7种。分别是:
PROPAGATION_REQUIRED,默认的传播行为,当前如果有事务,Spring就会使用该事务,否则会开始一个新事务
PROPAGATION_SUPPORTS,如果当前有事务则使用,没有也不会开始新事务
PROPAGATION_MANDATORY,如果当前有事务则使用,没有则会抛出异常
PROPAGATION_REQUIRES_NEW,总是会开启新事务,如果当前已经有事务存在会将原有的事务挂起
PROPAGATION_NOT_SUPPORTED,以非事务形式运行行为,如果当前已经有事务存在则挂起该事务
PROPAGATION_NEVER,以非事务形式运行行为,如果当前已经有事务存在则抛出异常
PROPAGATION_NESTED,如果当前有事务存在,则嵌套在该事务下执行;没有则会开启新事务
事务超时时间则是以getTimeout()方法获取,单位为秒(s);是否只读则通过isReadOnly()方法获取。
关于TransactionStatus接口的操作主要有三个,分别是isNewTransaction() 是否是新事务、isRollbackOnly()是否是只回滚事务,还有一个最重要的方法setRollbackOnly(),这个方法将事务设置为只允许回滚操作,即事务在任何操作下都是最终执行回滚。
spring事务管理主要有三个接口:
事务管理器接口:PlatformTransactionManager。可以为不同的框架提供不同的实现,包括Spring JDBC、iBatis、Hibernate(有版本限制,3.0以上,spring版本更高时需要更高版本)、JPA、Jdo、JTA
事务定义接口:TransactionDefinition。包括设置隔离级别(ISOLATION)、传播行为(PROPAGATION)、超时信息(TIMEOUT)、只读参数(READONLY)。
事务状态接口:TransactionStatus。获取事务具体的状态。
详细:
关于事务隔离级别,有5种。分别是:
ISOLATION_DEFAULT,默认隔离级别,也就是根据数据的默认隔离级别,不同的数据库的隔离级别也不尽相同。
ISOLATION_READ_UNCOMMITTED,级别最低的隔离级别。允许读取其他还未提交但已改变的数据,可导致脏读、幻读、不可重复读等异常
ISOLATION_READ_COMMITTED,提交隔离级别。允许读取其他已经提交的数据,可防止脏读,但可能出现幻读、不可重复读
ISOLATION_REPEATABLE_READ,更高级别的隔离。对相同字段的多次读取是一致的,可防止脏读、不可重复读,但可能出现幻读
ISOLATION_SERIALIZABLE,级别最高的隔离。采用锁的方式进行事务操作,可以防止脏读、幻读、不可重复读,但随之而来的付出的时间和性能代价也更大
关于事务传播行为,事务传播行为主要是用来解决业务层对事务的调用问题,有7种。分别是:
PROPAGATION_REQUIRED,默认的传播行为,当前如果有事务,Spring就会使用该事务,否则会开始一个新事务
PROPAGATION_SUPPORTS,如果当前有事务则使用,没有也不会开始新事务
PROPAGATION_MANDATORY,如果当前有事务则使用,没有则会抛出异常
PROPAGATION_REQUIRES_NEW,总是会开启新事务,如果当前已经有事务存在会将原有的事务挂起
PROPAGATION_NOT_SUPPORTED,以非事务形式运行行为,如果当前已经有事务存在则挂起该事务
PROPAGATION_NEVER,以非事务形式运行行为,如果当前已经有事务存在则抛出异常
PROPAGATION_NESTED,如果当前有事务存在,则嵌套在该事务下执行;没有则会开启新事务
事务超时时间则是以getTimeout()方法获取,单位为秒(s);是否只读则通过isReadOnly()方法获取。
关于TransactionStatus接口的操作主要有三个,分别是isNewTransaction() 是否是新事务、isRollbackOnly()是否是只回滚事务,还有一个最重要的方法setRollbackOnly(),这个方法将事务设置为只允许回滚操作,即事务在任何操作下都是最终执行回滚。
相关文章推荐
- Spring(Scheduler)
- java通过坐标截取整图代码
- eclipse 本地连接hadoop 进行开发
- 算法系列(五)排序算法下篇--如何超越排序算法下界
- 【java基础】String Pool
- 创建简单springMVC项目
- Java枚举的7种常见用法
- Java语言实现CRC32校验
- Java8 新特性----函数式接口,以及和Lambda表达式的关系
- 【JAVA】七 JAVA Dictionary 一 HashTable
- java_io学习_编码
- java_静态代码块
- 利用jclasslib查看局部变量信息
- Java Timer的使用(timer.schedule定时执行)
- spring事务管理几种方式
- java-RocketMQ
- java类文件从编译到运行
- Java EE开发平台随手记4——Mybatis扩展3
- debian 7 安装 JDK7
- “Bean named XXX must be of type[XXX], but was actually of type[XXX]”