包虫病

注册

 

发新话题 回复该主题

Spring事务管理 [复制链接]

1#
北京中科白癜风医院圆梦征程 http://news.39.net/bjzkhbzy/171230/5971030.html
事务的特性(ACID)

原子性(Atomicity):事务是一个原子操作,由一系列动作组成。事务的原子性确保动作要么全部完成,要么完全不起作用。

一致性(Consistency):一旦事务完成(不管成功还是失败),系统必须确保它处于一致的状态,而不会是部分完成部分失败。

隔离性(Isolation):有许多事务会同时处理相同的数据,因此每个事务都应该与其它事务隔离。

持久性(Durability):一旦事务完成,无论发生什么错误,它的结果都不应该受到影响。事务的结果被持久保存。

事务的隔离级别

多个事务同时运行,可能会同时操作同一个数据,产生并发,导致以下问题:

脏读(Dirtyread):脏读发生在一个事务读取了被另一个事务改写但尚未提交的数据时。如果这些改变在稍后被回滚了,那么第一个事务读取的数据就会是无效的。

不可重复读(Nonrepeatableread):不可重复读发生在一个事务执行相同的查询两次或两次以上,但每次查询结果都不相同时。这通常是由于另一个并发事务在两次查询之间更新了数据。(不可重复读主要是修改操作)。

幻读(Phantomreads):幻读和不可重复读相似。当一个事务(T1)读取几行记录后,另一个并发事务(T2)插入了一些记录时,幻读就发生了。在后来的查询中,第一个事务(T1)就会发现一些原来没有的额外记录。(幻读重点在新增或删除)。

根据业务场景选择不同的隔离级别:

隔离级别含义ISOLATION_DEFAULT(默认)使用后端数据库默认的隔离级别ISOLATION_READ_UNCOMMITTED(读未提交)允许读取尚未提交的更改。可能导致脏读、幻读或不可重复读。ISOLATION_READ_COMMITTED(读已提交)(Oracle默认级别)允许从已经提交的并发事务读取。可防止脏读,但幻读和不可重复读仍可能会发生。ISOLATION_REPEATABLE_READ(可重复读)(MYSQL默认级别)对相同字段的多次读取的结果是一致的,除非数据被当前事务本身改变。可防止脏读和不可重复读,但幻读仍可能发生。ISOLATION_SERIALIZABLE(串行读)完全服从ACID的隔离级别,确保不发生脏读、不可重复读和幻影读。这在所有隔离级别中也是最慢的,因为它通常是通过完全锁定当前事务所涉及的数据表来完成的。配置方式

Spring基于AOP实现声明式事务处理机制

优点:全在配置文件完成,将事务处理与业务代码分离,降低了开发和维护难度

步骤:

1.导入命名空间

2.定义事务管理器

3.设置事务属性

4.定义事务切面

applicationContext.xml

?xmlversion="1.0"encoding="UTF-8"?beansxmlns="

分享 转发
TOP
发新话题 回复该主题