Spring学习笔记(十)

前言

        从这篇博文开始记录Spring 事务管理的笔记,Spring 的声明式事务管理是Spring的一大亮点,运用了Spring Aop技术使用户能够直接经过配置文件或者注解就能够在方法上加上事务,让编码人员不须要再经过显示的编写事务代码为某些操做加上事务,同时Spring会提供了与底层事务无关的实物抽象,是用户更换底层的持久化框架时,只须要更改少许配置就能够继续使用事务。
java

ps:这几天工做比较忙,更新比较慢。。spring

数据库事务

        了解Spring事务管理以前,首先须要了解什么是事务,事务的思想能够简单的归结为“一荣俱荣,一损俱损”这句话,便可以将复数个对数据源的操做视为一个总体,只有操做所有成功整个事务才算成功,操做的结果才会做用于数据源,若是操做有一个出错失败,整个事务将会回滚,全部操做都不会有效果。这只是事务的简单解释,严格的定义上事务必须知足四个特性:原子性(Atomic)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)
数据库

  • 原子性:即组成一个事务的多数据库操做是一个不可再分割的原子单元(就是上面的总体概念)安全

  • 一致性:因为存在多个事务并发操做同一个数据源的状况,必须保证数据的一致性多线程

  • 隔离性:多个事务之间不能互相干扰,应该运行于不一样的隔离空间(和多线程的线程安全相似)并发

  • 持久性:一旦事务成功须要保证数据被持久化保存,即便发生突发事故,也要在事故处理后保证数据持久化框架

JDBC对事务的支持

        不一样的数据库对事务的支持并不相同,用户能够经过Connection#getMetaData()方法获取DatabaseMataData对象,该对象的supportsTransaction()查看数据库是否支持事务,用supportsTransactionIsolationLevel(int level)查看数据库对某个隔离等级的支持。
编码

        JDBC默认是每条SQL都对应一个事务,想要多条SQL使用一个事务首先要关闭JDBC的自动提交,JDBC使用事务代码:
spa

......
Connection conn;
try{
    conn = DriverManager.getConnection();
    conn.setAutoCommit(false);//关闭自动提交
    conn.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);
    Statement stmt = conn.createStatement();
    ......//执行一系列的SQL
    conn.commit();
} catch (Exception e) {
    ......
    conn.rollback();
} finally {
    ......
}

JDBC3.0引入了保存点的功能,容许使用Connection#setSavepoint(String pointname)建立保存点,使用使用Connection#rollback(String pointname)回滚至某个保存点,保存点以前的内容不会被回滚,但并不是全部的数据库都支持保存点,能够经过DatabaseMetaData#supportsSavePoint()查看是否支持保存点。线程

Spring事务管理

        Spring事务管理主要分为三个接口PlatformTransactionManager、TransactionDefinition、TransactionStatus,都位于org.springframework.transaction包中。

  • TransactionDefinition主要用于Spring读取了配置文件、注解后记录事务的隔离级别、超时时间、是否为只读事务和事务传播规则等信息

  • TransactionStatus表明一个具体的事务,继承了SavepointManager接口(有建立保存点、回滚到保存点和释放保存点等方法),同时TransactionStatus还扩展了boolean hasSavepoint()、boolean isNewTransaction()、boolean isCompleted()等能够查询事务状态的方法,同时提供了 void setRollbackOnly()能够设置事务为rollback-only,从而使事务回滚

  • PlatformTransactionManager是全部事务管理器的父接口,提供了TransactionStatus getTransaction(TransactionDefinition definition)获取事务,以及commit(TransactionStatus status)提交事务,rollback(TransactionStatus status)回滚事务

相关文章
相关标签/搜索