Spring学习笔记(十)

前言

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

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

数据库事务

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

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

  • 一致性:由于存在多个事务并发操作同一个数据源的情况,必须保证数据的一致性

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

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

JDBC对事务的支持

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

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

......
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)回滚事务




你可能感兴趣的:(spring,事务管理)