一、简述事物处理

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();
}

第6章 Spring的事物处理的更多相关文章

  1. spring的事物实现

    Spring的事物主要有三个接口 PlatformTransactionManager. 根据TransactionDefinition配置的事物信息创建事物 TransactionDefinitio ...

  2. Spring定义事物通知tx:advice

    <aop:config proxy-target-class="false">    <aop:advisor advice-ref="txAdvice ...

  3. Java开发工程师(Web方向) - 04.Spring框架 - 第1章.Spring概述

    第1章.Spring概述 Spring概述 The Spring Framework is a lightweight solution and a potential one-stop-shop f ...

  4. 2017.2.28 activiti实战--第七章--Spring容器集成应用实例(五)普通表单

    学习资料:<Activiti实战> 第七章  Spring容器集成应用实例(五)普通表单 第六章中介绍了动态表单.外置表单.这里讲解第三种表单:普通表单. 普通表单的特点: 把表单内容写在 ...

  5. Spring管理事物两种方式

    Spring管理事物两种方式 1. 编程式事物管理(在开发中不经常使用) 使用步骤 1. 配置数据库事物管理 DataSourceTransactionManager <!--配置事物管理器-- ...

  6. Spring学习指南-第二章-Spring框架基础(完)

    第二章 Spring框架基础 面向接口编程的设计方法 ​ 在上一章中,我们看到了一个依赖于其他类的POJO类包含了对其依赖项的具体类的引用.例如,FixedDepositController 类包含 ...

  7. Spring入门篇——第7章 Spring对AspectJ的支持

    第7章 Spring对AspectJ的支持 介绍Spring对AspectJ的支持 7-1 AspectJ介绍及Pointcut注解应用 实例 完成了在xml文件的配置 7-2 Advice定义及实例 ...

  8. Spring入门篇——第6章 Spring AOP的API介绍

    第6章 Spring AOP的API介绍 主要介绍Spring AOP中常用的API. 6-1 Spring AOP API的Pointcut.advice概念及应用 映射方法是sa开头的所有方法 如 ...

  9. Spring入门篇——第5章 Spring AOP基本概念

    第5章 Spring AOP基本概念 本章介绍Spring中AOP的基本概念和应用. 5-1 AOP基本概念及特点 5-2 配置切面aspect ref:引用另外一个Bean 5-3 配置切入点Poi ...

随机推荐

  1. 异常 Exception

    异常:是指在程序运行的过程中发生的一些不正常的时间. 分为受查异常和非受查异常. 受查异常:编译时期出现的异常   除了RuntimeException的异常,必须处理以及throws 非受查异常:运 ...

  2. v-for遍历出的元素上添加click事件,获取对应元素上的属性id值

    <span v-for="(n,nav) in floorList" data-id="{{nav.itemId}}" v-on:click=" ...

  3. Mac下maven工程的创建,并搭建SSH环境

    最近项目有用到maven,就特地学了一下.maven的一句话攻略就是,项目托管.帮你解决各种项目琐事:清理,导包....等等. 首先先到apach官网去下载一个maven的包,http://maven ...

  4. Thinkphp文件上传

    1.在IndexController.class.php里面写2个方法,shangchuan用来显示页面,upload是上传文件的方法. <?php namespace Home\Control ...

  5. gprs/gsm 在linux下的应用

    之前有篇随笔整理了一种在裸机下用状态机+超时的机制来操作gprs/gsm,linux下就不需要了,本身有完善的调度机制,在等待的流程中直接sleep就行了. 下面是飞凌OK6410下的 demo, 其 ...

  6. js笔记

    1.克隆对象 克隆数组: var country=['中国','美国']; var copyCountry=country.slice(0); 克隆对象: var people={sex:'man', ...

  7. 推荐几款我一直在用的chrome插件(下)

    请先看:推荐几款我一直在用的chrome插件(上) 6. Pocket 可以很方便的保存文章.视频等供以后查看,即实现了“Read it later”功能.有了 Pocket,您可以将所有想下次读的内 ...

  8. iOS多线程-多线程实现之GCD

    什么是GCD? GCD: Grand Central Dispatch (重要的中枢调度器) GCD是纯C语言的, 学习它就是学习一些函数的使用. GCD的核心概念和使用步骤 核心概念 任务 : 执行 ...

  9. R语言:ggplot2精细化绘图——以实用商业化图表绘图为例

    本文版权归http://www.cnblogs.com/weibaar 本文旨在介绍R语言中ggplot2包的一些精细化操作,主要适用于对R画图有一定了解,需要更精细化作图的人,尤其是那些刚从exce ...

  10. Linux搭建Nginx

    1.Nginx安装 1.1 pcre (1)下载编译包 http://www.pcre.org/ (注意需要的是pcce,而非pcre2) (2)tar -zxvf pcre-8.36.tar.gz  ...