spring事务的应用场景 Spring 事务管理
Spring 事务管理
数据库事务是由一系列的动作组成的 这些动作被当作单独的一个工作单位 这些动作要么被全部完整执行 要么全部不被执行 事务管理是关系数据中一个重要的部分
企业级应用使用事务来保证数据的完整性和一致性 可以使用以下四个属性来描述事务
原子性
一个事务应该被当作一个单独的操作单位被执行 也就是说这一连串的操作被执行成功或者不成功
一致性
这个代表数据库参照完整性的一致性 表中存在唯一主键
隔离性
在同一个时刻可能会有多个事务的进程操作同一个数据集 每一个事务应该同其他的事务隔离 防止数据被篡改
持久性
一旦事务被执行成功 事务的结果需要被持久化 并且不能因为系统错误导致数据丢失
一个真正的关系型数据库管理系统会为每一个会话保证上面四个特性 可以通过以下SQL实现
开始一个会话通过使用 Begin Transaction 命令
通过批量执行多个 delete update insert 操作
如果所有的操作被执行 则执行mit操作 否则执行rollback操作
Spring 框架在事务管理的API之上提供了一个抽象层 Spring的事务支持的目的在于通过添加事务的能力到POJO来提供一个可选的EJB事务
Spring 提供编程式事务和声明式两种事务管理 EJB需要一个应用服务器 但是Spring事务管理能够被实现而不需要应用服务器
本地事务 和 分布式事务
本地事务特定于单个事务型资源 例如JDBC连接 而分布式事务能够在分布式系统中跨多个事务性资源
编程式事务 和 声明式事务
编程式事务管理 通过编程的方式来管理事务 这种提供了极度的灵活性 但是很难去维护
声明式事务管理 你需要从业务代码中分离事务管理 你只能通过annotations 或者 基于XML的配置来管理事务
事务隔离级别
MITTED: 脏读能够被阻止 不可重复读和幻读会发生
UNMITTED: 脏读 不可重复读 和幻读会发生
REPEATABLE_READ 脏读和不可重复读能被阻止 幻读会发生

lishixinzhi/Article/program/Java/ky/201311/27873