spring事务学习总结
来源:互联网 发布:烟台华商网络怎么样 编辑:程序博客网 时间:2024/04/30 01:46
spring事务
1.主要有三个接口:PlatformTransactionManager(全局事务管理器)、TransactionDefinition(事务配置相关,如隔离、只读、传播、超时、异常回滚等)、TransactionStatus(有查询事务状态的相关方法,如isNewTransaction、isRollBackOnly等)。
2.Spring事务的隔离级别
1. ISOLATION_DEFAULT: 这是一个PlatfromTransactionManager默认的隔离级别,使用数据库默认的事务隔离级别.hibernate默认为REPEATABLE_READ、oracle默认为READ_COMMITTED;
另外四个与JDBC的隔离级别相对应
2. ISOLATION_READ_UNCOMMITTED: 这是事务最低的隔离级别,它充许令外一个事务可以看到这个事务未提交的数据。
这种隔离级别会产生脏读,不可重复读和幻像读。
3. ISOLATION_READ_COMMITTED: 保证一个事务修改的数据提交后才能被另外一个事务读取。另外一个事务不能读取该事务未提交的数据
4. ISOLATION_REPEATABLE_READ: 这种事务隔离级别可以防止脏读,不可重复读。但是可能出现幻像读。
它除了保证一个事务不能读取另一个事务未提交的数据外,还保证了避免下面的情况产生(不可重复读)。
5. ISOLATION_SERIALIZABLE(串行化,事务只能排队进行,不能并行) 这是花费最高代价但是最可靠的事务隔离级别。事务被处理为顺序执行。
除了防止脏读,不可重复读外,还避免了幻像读。
3.spring事务的传播级别Propagation :
有以下选项可供使用(标红为常用):
PROPAGATION_REQUIRED--支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。PROPAGATION_SUPPORTS--支持当前事务,如果当前没有事务,就以非事务方式执行。PROPAGATION_MANDATORY--支持当前事务,如果当前没有事务,就抛出异常。PROPAGATION_REQUIRES_NEW--新建事务,如果当前存在事务,把当前事务挂起。PROPAGATION_NOT_SUPPORTED--以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。PROPAGATION_NEVER--以非事务方式执行,如果当前存在事务,则抛出异常。
PROPAGATION_NESTED--支持当前事务,创建新事务,方法在嵌套事务里执行;无当前事务,创建新事务并和REQUIRED相同。
4.实现spring事物有两种方式:编程式和声明式
(1)编程式
编程式可以在业务逻辑类上注入xml中配置的TransactionTemplate类;在业务逻辑类中调用TransactionTemplate.execute(new TransactionCallbackWithoutResult(){ });
把需要控制的事物内容放进去即可;
(2)声明式
1.TransactionProxyFactoryBean代理类配置事物代理bean,一般不推荐,只能一一对应。
2.xml中配置aop。
<tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <!-- 所有以get开头的方法都是只读的 --> <tx:method name="get*" read-only="true"/> <!-- 其他方法使用默认的事务设置,超时5s --> <tx:method name="*" isolation="DEFAULT" propagation="REQUIRED" timeout="-1"/> </tx:attributes> </tx:advice> <!-- 配置aop元素 --> <aop:config> <aop:pointcut expression="execution(* com.service.Imp.*Imp.*(..))" id="myPointcut"/> <aop:advisor advice-ref="txAdvice" pointcut-ref="myPointcut"/> </aop:config>3.注解方式配置@Transactional,优点方便,缺点是每个业务类都要配一遍。
PS:<tx:attributes>中还可以包含rollback-for:发生哪些异常进行回滚;no-rollback:发生哪些异常不进行回滚;timeout:超时时长,默认为-1;read-only:只读;
- Spring事务学习总结
- spring事务学习总结
- 关于spring管理事务的学习总结。
- Spring学习总结(六)---Spring事务管理(一:事务回顾)
- spring 事务总结
- spring事务总结
- Spring事务配置总结:
- spring事务的总结
- spring事务机制总结
- Spring事务机制总结
- spring 事务机制总结
- Spring事务配置总结
- Spring 事务总结
- spring事务配置总结
- spring 事务的总结
- spring事务总结
- spring学习(十二)—事务实现的原理总结
- Spring事务的学习
- CSS之visibility和display的差别
- Linux下给进程重命名
- NAT概述
- 《从零开始学Swift》学习笔记(Day 16)——字典集合
- Libevent源码分析-----Libevent时间管理
- spring事务学习总结
- 线性同余方程及例题 codeforces 710D
- Android之百度云推送(二)如何集成java服务端
- hdu1171 Big Event in HDU(多重背包)
- Libevent源码分析-----管理超时event
- JVM启动参数
- android ListView 几个重要属性
- 基于Protobuf和Libuv实现RPC
- include、include_once与require、require_once区别