Spring4快速入门第七章事务管理
2016-02-21 11:08
615 查看
spring事务管理
事务介绍:
事务是一系列动作,要么一起完成,要么一起结束。用来保证数据的完整性和一致性。最常见的就是转账问题:A出账和B进账要同时完成,否则就会出现A钱出账了,B钱却没有的情况。
事务分类:
编程式事务管理(用代码嵌入业务中管理事务,不建议使用);声明式事务管理(通过配置的方式管理,从业务中分离出来)。
配置声明式事务(基于注解):
在spring配置文件中配置
在方法或类上填加 @Transactional 即可
事务属性:
事务的传播性
触发点:当一个事务A调用另外一个事务B
1.使用 propagation 指定事务的传播行为
2.默认取值为 REQUIRED, 使用调用方法A的事务,里面的事务B必须都要满足事务A,也就相当于串联电路,一旦出现问题就走不通。
3.REQUIRES_NEW: 事务自己的事务, 执行一个是一个,也就相当于并联电路,出现问题自己扛不影响整体。
事务的隔离级别
事务隔离级别是为了避免并发事务所带来的问题,但考虑到效率一般用比较低的隔离:READ_COMMITTED
使用 isolation 指定事务的隔离级别
事务回滚
声明式事务默认对所有的运行时异常进行回滚. 也可以针对性进行设置. 通常情况下去默认值即可.
noRollbackFor={XXXException.class}
noRollbackForClassName = ""
在遇到一些认为指定的异常错误可以使用noRollbackForClassName ,不会滚该异常导致的问题。及忽略这个问题以便提高效率。
事务是否只读
使用 readOnly 指定事务是否为只读. 优化事务便于提高效率,前提事务只读取数据
事务占用时间
使用 timeout 指定强制回滚之前事务可以占用的时间,避免事务占用太多时间以便提高效率。
事务介绍:
事务是一系列动作,要么一起完成,要么一起结束。用来保证数据的完整性和一致性。最常见的就是转账问题:A出账和B进账要同时完成,否则就会出现A钱出账了,B钱却没有的情况。
事务分类:
编程式事务管理(用代码嵌入业务中管理事务,不建议使用);声明式事务管理(通过配置的方式管理,从业务中分离出来)。
配置声明式事务(基于注解):
在spring配置文件中配置
<!-- 配置事务管理器 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"></property> </bean> <!-- 启用事务注解 --> <tx:annotation-driven transaction-manager="transactionManager"/>如果是通过hibernate框架这需要将DataSourceTransactionManager改为HibernateTransactionMannger
在方法或类上填加 @Transactional 即可
事务属性:
事务的传播性
触发点:当一个事务A调用另外一个事务B
1.使用 propagation 指定事务的传播行为
2.默认取值为 REQUIRED, 使用调用方法A的事务,里面的事务B必须都要满足事务A,也就相当于串联电路,一旦出现问题就走不通。
3.REQUIRES_NEW: 事务自己的事务, 执行一个是一个,也就相当于并联电路,出现问题自己扛不影响整体。
事务的隔离级别
事务隔离级别是为了避免并发事务所带来的问题,但考虑到效率一般用比较低的隔离:READ_COMMITTED
使用 isolation 指定事务的隔离级别
事务回滚
声明式事务默认对所有的运行时异常进行回滚. 也可以针对性进行设置. 通常情况下去默认值即可.
noRollbackFor={XXXException.class}
noRollbackForClassName = ""
在遇到一些认为指定的异常错误可以使用noRollbackForClassName ,不会滚该异常导致的问题。及忽略这个问题以便提高效率。
事务是否只读
使用 readOnly 指定事务是否为只读. 优化事务便于提高效率,前提事务只读取数据
事务占用时间
使用 timeout 指定强制回滚之前事务可以占用的时间,避免事务占用太多时间以便提高效率。
@Transactional(propagation=Propagation.REQUIRES_NEW, isolation=Isolation.READ_COMMITTED, noRollbackFor={Exception.class}, readOnly=true, timeout=5)
相关文章推荐
- Mybatis
- 权限框架Spring secutity
- 常见MyEclipse报错—— serialVersionUID的作用
- 关于java线程、进程的一些问题
- LeetCode_3_LongestSubstringWithoutRepeatingCharacters(Java Code)
- 基于jpa/springData ,hibernate,mybtis的分页
- Spring MVC请求参数获取的几种方法
- JAVA多线程-线程间通信(五)-类ThreadLocal的使用
- spring与springmvc整合
- 【装载】java异常机制
- Struts2 DMI 动态方法调用
- Spring AOP配置文件
- Java 集合系列08之 List总结(LinkedList, ArrayList等使用场景和性能分析)
- java发送短信系列之限制日发送次数
- 《JAVA语言程序设计》(二)
- java发送短信系列之限制发送频率
- java中的随机数Random
- 生产消费者模式
- java发送短信系列之同步、异步发送短信
- java安全——类加载器+字节码校验+安全管理器与访问权限