• 第6章 Spring的事物处理


    一、简述事物处理

    1、事物处理的基本概念

    1)提交:所有操作步骤都被完整执行后,称该事物被提交

    2)回滚:某步操作执行失败,所有操作都没被提交,则事物必须被回滚

    2、事物处理的特性(ACID)

    1)原子性

    2)一致性

    3)隔离性

    4)持久性

    二、事物处理的3种方式

    1、关系型数据库的事物处理

    1)Begin Transaction(启动事务处理)

    2)Commit或RollBack(提交或回滚)

    3)End Transaction(提交事务处理)

    2、传统的JDBC事务处理

    package com.gc.action;
    
    import org.junit.Test;
    import javax.sql.DataSource;
    import java.sql.Connection;
    import java.sql.SQLException;
    import java.sql.Statement;
    
    /**
     * Created by sky on 16-7-18.
     */
    public class JdbcHelloWorld {
        DataSource dataSource;
        //获取数据源
        public void setDataSource(DataSource dataSource) {
            this.dataSource = dataSource;
        }
    
        @Test
        public void test() {
            Connection conn = null;
            Statement stmt = null;
    
            try {//获取数据库连接
                dataSource.getConnection();
                //开始启动事务
                //Sets this connection's auto-commit mode to the given state.
                conn.setAutoCommit(false);
                //Creates a Statement object for sending SQL statements to the database.
                conn.createStatement();
                //执行相应的操作
                stmt.executeUpdate("INSERT INTO hello VALUES (1, 'gf', 'HelloWorld')");
                //执行成功则提交事务
                conn.commit();
            } catch (SQLException e1) {
                if (conn != null) {
                    try {
                        //执行不成功则回滚
                        conn.rollback();
                    } catch (SQLException e2) {
                        System.out.println("数据库连接有异常" + e2);
                    }
                }
            } finally {
                //加入stmt不为空,则关闭stmt
                if (stmt != null) {
                    try {
                        stmt.close();
                    } catch (SQLException e3) {
                        System.out.println("执行操作有异常" + e3);
                    }
                }
                if (conn != null) {
                    try {
                        conn.close();
                    } catch (SQLException e4) {
                        System.out.println("数据连接有异常" + e4);
                    }
                }
            }
    
        }
    }

    3、分布式事务处理

    原子性、多个事务管理器合作

    三、Spring的事务处理

    1、Spring事务处理的概述

    Spring中事务处理实际上是基于动态AOP机制实现

    package org.springframework.transaction;
    
    import org.springframework.transaction.TransactionDefinition;
    import org.springframework.transaction.TransactionException;
    import org.springframework.transaction.TransactionStatus;
    
    public interface PlatformTransactionManager {  
    //目前的事务
    TransactionStatus getTransaction(TransactionDefinition var1) throws TransactionException; 
    void commit(TransactionStatus var1) throws TransactionException;
    void rollback(TransactionStatus var1) throws TransactionException;
    }
    TransactionDefinition代表着事务处理的一些属性定义
    package org.springframework.transaction;
    
            public interface TransactionDefinition {
                int PROPAGATION_REQUIRED = 0;
                int PROPAGATION_SUPPORTS = 1;
                int PROPAGATION_MANDATORY = 2;
                int PROPAGATION_REQUIRES_NEW = 3;
                int PROPAGATION_NOT_SUPPORTED = 4;
                int PROPAGATION_NEVER = 5;
                int PROPAGATION_NESTED = 6;
                int ISOLATION_DEFAULT = -1;
                int ISOLATION_READ_UNCOMMITTED = 1;
                int ISOLATION_READ_COMMITTED = 2;
                int ISOLATION_REPEATABLE_READ = 4;
                int ISOLATION_SERIALIZABLE = 8;
                int TIMEOUT_DEFAULT = -1;
                //获得事务的传播行为
                int getPropagationBehavior();
                //获得事务的隔离层次
                int getIsolationLevel();
                //获得事务是否超时
                int getTimeout();
                //判断是否为只读事务
                boolean isReadOnly();
                //返回一个事务的名字
                String getName();
            }
    TransactionStatus代表了目前的事务
    package org.springframework.transaction;
    
            import java.io.Flushable;
            import org.springframework.transaction.SavepointManager;
    
            public interface TransactionStatus extends SavepointManager, Flushable {
                //判断是否是一个事务
                boolean isNewTransaction();
                
                boolean hasSavepoint();
                //设定为只读事务
                void setRollbackOnly();
                //判断是否为只读事务
                boolean isRollbackOnly();
                
                void flush();
                //判断一个事务是否完成
                boolean isCompleted();
            }
  • 相关阅读:
    腾讯2014年实习生招聘笔试面试经历
    GitHub具体教程
    Hadoop Hive与Hbase关系 整合
    阿里中间件——消息中间件Notify和MetaQ
    Android分享介绍
    Python的包管理工具Pip
    [ACM] POJ 1094 Sorting It All Out (拓扑排序)
    机器学习实践指南:案例应用解析
    android之照相、相冊裁剪功能的实现过程
    组织:OASIS(结构化信息标准促进组织)
  • 原文地址:https://www.cnblogs.com/beaconSky/p/5679856.html
Copyright © 2020-2023  润新知