spring事务管理(暂定)

spring事务管理
事务有四大特性(ACID)


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


2.一致性(Consistency)事务在完成时,必须是所有的数据都保持一致状态。


3.隔离性(Isolation)并发事务执行之间无影响,在一个事务内部的操作对其他事务是不产生影响,这需要事务隔离级别来指定隔离性。


4.持久性(Durability)一旦事务完成,数据库的改变必须是持久化的。
事务并发所可能存在的问题: 

1.脏读:一个事务读到另一个事务未提交的更新数据。
 
2.不可重复读:一个事务两次读同一行数据,可是这两次读到的数据不一样。 

3.幻读:一个事务执行两次查询,但第二次查询比第一次查询多出了一些数据行。 

4.丢失更新:撤消一个事务时,把其它事务已提交的更新的数据覆盖了。

实现事务管理可以分为两种方式:
1.编程式事务管理:
TransactionTemplate 的execute 方法接收一个TransactionCallback 实例。Callback 也是Spring 的经典设计,用于简化用户操作, TransactionCallback 包含如下方法。 
(一)Object dolnTransaction(TransactionStatus status) 。 该方法的方法体就是事务的执行体。 

transactionTemplate.execute(new TransactionCallback() { 
    public Object doInTransaction(TransactionStatus status) { 
        try{ 
            } 
        catch (Exception e) { 
            status.setRollbackOnly(); 
        } 
        finally { 
               }
    }}
); 
(二)如果事务的执行体没有返回值,则可以使用TransactionCallbackWithoutResultl类的实例。这是个抽象类,不能直接实例化,只能用于创建匿名内部类。它也是TransactionCallback 接口的子接口,该抽象类包含一个抽象方法: 
void dolnTransactionWithoutResult(TransactionStatus status)该方法与dolnTransaction 的效果非常相似,区别在于该方法没有返回值,即事务执行体无须返回值。 

2.声明式事务管理
两种方式:1.基于tx和aop命名空间的xml配置文件 
                  2.基于注解,这种方式最简单,也是最为常用的,只需要在配置文件中开启对注解事务管理的支持。
 <!-- 声明式事务管理 配置事物的注解方式注入-->
<tx:annotation-driven transaction-manager="transactionManager"/>

然后在需要事务管理的地方加上@Transactional注解,如:
@Transactional(rollbackFor=Exception.class)
   
 public void insert(String sql, boolean flag) throws Exception {
       
     dao.insertSql(sql);
        // 如果flag 为 true ,抛出异常
       
     if (flag){
            
        throw new Exception("has exception!!!");
     
   }
    }
rollbackFor属性指定出现Exception异常的时候回滚,遇到检查性的异常需要回滚,默认情况下非检查性异常,包括error也会自动回滚。

猜你喜欢

转载自blog.csdn.net/yang03_26/article/details/85236172