Spring的事务
来源:互联网 发布:电销数据购买 编辑:程序博客网 时间:2024/06/06 01:09
前边我们讲过了Spring对JDBC的支持,即主要是在配置文件中配置一个普通的bean,class使用JDBCTemplate即可。今天我们来讲一讲Spring如何实现对事务的支持。
1.事务
事务就是一系列的动作的集合,他被当做一个独立的单元,这个单元中的动作要么全部完成,要么全部不完成。这样子事务就可以确定数据的一致性和完整性。
事务的四个属性:原子性(事务是一个原子整体,一系列动作要么全部完成,要么全部不完成)、一致性(事务一旦提交,数据就处于一种一致性状态当中)、隔离性(不同事务可能同时处理同一个数据,为防止数据损坏,要将事务隔离开来)、持久性(事务一旦提交,无论任何系统错误,结果不受影响)。
2.JDBC处理事务
在业务方法开始前关闭事务默认提交行为并且开启一个新的事务、业务方法正常执行后提交事务、出异常时回滚事务、finally中关闭事务。对于数量众多的业务方法,若我们对每个方法都这样处理,显得太臃肿,前边的事务的处理很类似于我们Spring中的前置-返回-异常-后置的通知,所以我们自然而然的想到了使用Spring的AOP来处理事务。
3.Spring来处理事务
常用两种方法
① 编程式事务:写代码
② 声明式事务:只需在配置文件中进行配置就可以了,声明式事务最常用。
4. Spring中的事务管理器
Spring根据不同的访问数据库技术的事务管理的API中抽象出了一整套的事务机制,开发人员不必了解底层的API,就可以使用这些事务机制。
Spring的核心事务管理器是Interface platformTransaction,管理封装了一套独立技术的方法,无论使用那种Spring的事务管理策略(编程式或声明式),事务管理器都是必须的。
5.Spring中的事务管理器的不同实现
① 对JDBC,使用类DataSourceTransactionManager,在程序中必须传入一个数据源。
② 对JTA,使用类JTATransactionManager,在服务器上撒航用JTA(Java Transanction API)进行事务管理
③ 对Hibernate,使用HibernateTransanctionManager管理事务。
6.Spring管理事务的具体方法(针对JDBC)
① 配置一个bean,class为DataSourceTransanctionManager,并为其配置DataSource属性
② 引入tx的namespace,并在配置文件中是事务注解生效,即使用<tx:annotation-driven:transaction-manager="指向上边bean的id">
③ 在事务方法上添加@TransactionManager注解即可
7. 事务的五大属性
在@Transactional注解的属性中进行配置
两个事务方法,T1调用T2
① 事务的传播行为,progagation=Progagation.REQUIRED
当一个事务方法被另一个事务方法调用时,必须指定事务应该如何传播。事务的传播行为可以由主事务的@Transantion的属性progagation指定。常用值是required和required_new两个值,前者代表T2有事务在运行就可以,即T2方法使用T1的事务,若T1的事务不存在,则T2开启一个新的事务。
后者表示T2必须开启一个自己的新事物,当运行到T2时,T1的事务挂起。默认值时required。
② 事务的隔离级别I,isolation=Isolation.COMMITED
当一个程序或多个程序中的多个事务在操作同一组数据时,就可能出现一些意外的问题。如:脏读,T1读取了T2更新还未提交的数据,若T2回滚,T1读取到的数据就是临时且无效的;不可重复读,T1读取一个字段,T2更新该字段,之后T1再读取该字段,之久不同;幻读,T1读取一个字段,T2在该表掺入一些新的数据,T1再读取,就会多出几行。我们常用读已提交的内容来避免这些问题。
③ 事务的不回滚异常
我们可以指定Spring的该事务对出现的哪些异常类型不进行事务的回滚。
④ 事务的只读属性,readOnly="true"
当我们只是从数据库中读取数据,而不会更新数据的时候,我们可以设置当前事务的只读属性为true。因为事务可在表和行上获得锁,事务运行时长期占用资源,并对数据库的整体性能产生影响,所以设置事务的只读属性可以帮助数据库引擎进行优化。
⑤ 事务的超时属性
这个属性设定了在强制回滚事务前的时间,单位是秒。可防止事务长期占用资源。
- Spring 的事务,分布式事务。
- Spring的事务,什么是事务?
- Spring事务的学习
- Spring的事务
- 6.3 Spring的事务
- Spring事务的学习
- Spring的事务属性
- Spring的事务配置
- Spring的事务
- Spring的事务配置
- Spring事务的架构
- Spring的事务配置
- spring 的嵌套事务
- spring的事务配置
- spring的事务理解
- Spring的事务配置
- Spring的事务配置
- Spring事务的架构 .
- OTT TV影音系统如何做到不丢帧、不卡顿、不花屏
- C 中的malloc/free 与C++中new/delete的区别
- TF随笔-10
- Codeforces #245 (Div. 2)C. Xor-tree(DFS&&贪心
- 关于Cesium中的常用坐标系及说明
- Spring的事务
- vim下用ctags+cscope查找切换
- Spring(12)——BeanFactoryPostProcessor
- 搜索
- Log4j日志组件
- 支持向量机通俗导论(理解SVM的三层境界)
- 数组切分
- KVM — 使用 libvirt 工具栈创建管理虚拟机实例
- 《Neural Networks and Deep Learning》codes' note