Spring事物管理

1.java事物

(一)java事物的产生

程序操作数据库的需要,在java编写的程序或者系统当中,实现ACID的操作。

(二)java事物的实现范围

通过JDBC相应方法间接来实现对数据库的增删改查,把事物转移搭配java程序代码当中进行控制。确保事物要么全部成功,要么全部失败。
java事物机制哈原理就是确保数据库操作的ACID特性

(三)java事物实现模式

java事物的实现:通过java代码来实现对数据库的事物性操作。
java事物类型:
    JDBC事物:用Connection对象控制,包括手动模式和自动模式;
    JAT(java Transaction API)事物:与实现无关的,与协议无关的API
    容器事物:应用服务器提供的,企鹅大多数是基于JTA完成(通常基于JNDI的,相当复杂的API实现)
三种事物的差异

JDBC事物:控制的局限性在一个数据库连接内,但是其使用简单。
JTA事物:功能强大,可跨越多个数据库或多个DAO,使用比较复杂
容器事物:主要指的是J2EE应用服务器提供的事物管理,局限与EJB。

2.Spring当中的事物管理

Spring事物管理器:按照给定的事物规则来执行提交,或者回滚操作,给定的规则是由TransactionDefinition接口来定义的。

(一)事物只读

事物是否只读:
    利用数据库事物的“只读”属性,进行特定优化处理
优化处理:有的数据库厂商,比如Oracle,在只读事物的时候,数据库本身不启动回滚字段,也不记录回滚日志,所以相应的减少了数据库的操作,提高了数据库访问的效率。
设置“只读”注意:
    事物的是否“只读”属性,不同的数据库厂商有不同的支持
    Oracle:事物的“readOnly”不起作用,不影响其增删改查
    Mysql:事物的“readOnly”为true,只能查,增删改出异常

(二)事物超时

事物超时:
    事物超时就是事物的一个定时器,在特定时间内事物如果没有执行完毕,那么就会自然回滚,而不是一致等待。
Spring在不同的事物管理API之上定义了一个抽象层,而开发人员不必了解底层的事物管理API,就可以使用Spring的事物管理机制
Spring即支持编程式管理,也支持声明式管理
设计事物时要注意点:
    为了使应用程序很好的运行,事物不能运行太长的时间,因为事物可能涉及对后端数据库的锁定,所以长时间的事物会不必要的占用数据库资源

(三)事物接口

事物接口:
    通过事物管理器获取TransactionStatus实例
    控制事物在回滚或提交的时候需要应用对应的事物状态
//Spring事物状态接口
//通过调用PlatformTransactionManager的getTransaction()获取食物状态实例
public interface TransactionStatus{
    
    //是否是新的事物
    boolean isNewTransaction();

    //是否有恢复点
    boolean hasSavepoint();

    //是否只回滚
    void setRollbackOnly();

    //是否以完成
    boolean isCompleted();
}

(四)编程式事物管理

Spring 的编程式管理:将事物管理代码嵌入到业务方法当中来控制事物的提交和回滚,在编程式管理事物时,必须在每个事物操作当中包含额外的事物管理代码
Spring的声明式管理:大多数情况下比编程式管理更加好用,它将事物管理代码从业务逻辑当中分离出来,以声明的方式实现事物管理,事物管理作为一种横切关注点,可以通过AOP方法模式化,Spring通过Spring AOP框架支持声明式事物管理
(1).编程式事物管理的实现方式
事物管理器(PlatformTransactionManager)方式:
    类似于JTA UserTransaction API 方式,但异常处理简洁
    核心类为:Spring事物管理的三个接口类以及JdbcTemplate类
模版事物(TransactionTemplate)的方式:
    此为Spring官方团队推荐的编程式水位管理方式
    此工具为JdbcTemplate类
(2)声明式事物

基于AOP模式机制,对方法进行拦截,在方法开始时加入一个事物,在方法执行之后,根据情况进行提交或者回滚。

声明式事物管理的配置类型:tx拦截器,全注释

(五)申明式事物的配置

1.配置事物管理器

    
        
        
    

2.申明通知:事物管理器管理哪些方法,怎样管理

    
        
        
            
            
            
            
        
    
3.关联通知和切点(通过类(切点)和通知(方法)关联)
    
    
        
        
        
        
    

你可能感兴趣的:(Spring事物管理)