第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();
}
第6章 Spring的事物处理的更多相关文章
- spring的事物实现
Spring的事物主要有三个接口 PlatformTransactionManager. 根据TransactionDefinition配置的事物信息创建事物 TransactionDefinitio ...
- Spring定义事物通知tx:advice
<aop:config proxy-target-class="false"> <aop:advisor advice-ref="txAdvice ...
- Java开发工程师(Web方向) - 04.Spring框架 - 第1章.Spring概述
第1章.Spring概述 Spring概述 The Spring Framework is a lightweight solution and a potential one-stop-shop f ...
- 2017.2.28 activiti实战--第七章--Spring容器集成应用实例(五)普通表单
学习资料:<Activiti实战> 第七章 Spring容器集成应用实例(五)普通表单 第六章中介绍了动态表单.外置表单.这里讲解第三种表单:普通表单. 普通表单的特点: 把表单内容写在 ...
- Spring管理事物两种方式
Spring管理事物两种方式 1. 编程式事物管理(在开发中不经常使用) 使用步骤 1. 配置数据库事物管理 DataSourceTransactionManager <!--配置事物管理器-- ...
- Spring学习指南-第二章-Spring框架基础(完)
第二章 Spring框架基础 面向接口编程的设计方法 在上一章中,我们看到了一个依赖于其他类的POJO类包含了对其依赖项的具体类的引用.例如,FixedDepositController 类包含 ...
- Spring入门篇——第7章 Spring对AspectJ的支持
第7章 Spring对AspectJ的支持 介绍Spring对AspectJ的支持 7-1 AspectJ介绍及Pointcut注解应用 实例 完成了在xml文件的配置 7-2 Advice定义及实例 ...
- Spring入门篇——第6章 Spring AOP的API介绍
第6章 Spring AOP的API介绍 主要介绍Spring AOP中常用的API. 6-1 Spring AOP API的Pointcut.advice概念及应用 映射方法是sa开头的所有方法 如 ...
- Spring入门篇——第5章 Spring AOP基本概念
第5章 Spring AOP基本概念 本章介绍Spring中AOP的基本概念和应用. 5-1 AOP基本概念及特点 5-2 配置切面aspect ref:引用另外一个Bean 5-3 配置切入点Poi ...
随机推荐
- 2 django系列之django分页与templatetags
preface 当页面出现的条目多的时候,我们就需要使用分页功能了.Django作为一个知名的web框架,自然也提供了分页功能,下面说说它. Python-shell 练练手 在python下入手 先 ...
- hibernate优化笔记(随时更新)
一:优化配置 1.关联映射的配置:对照之前的博客,如:inverse属性的设置(减少对同一对象的多条update语句):在one端设置为true,只会执行一次update语句 2.级联cascade属 ...
- CsvHelper支持List<T>
/// <summary> /// Csv帮助类 /// </summary> public class CsvHelper { /// <summary> / ...
- Django基础,Day5 - form表单投票详解
投票URL polls/urls.py: # ex: /polls/5/vote/ url(r'^(?P<question_id>[0-9]+)/vote/$', views.vote, ...
- centos 7.0 编译安装php 7.0.3
php下载页面 http://cn2.php.net/downloads.php 7.0.3多地区下载页面 http://cn2.php.net/get/php-7.0.3.tar.gz/from/a ...
- Angular datetime format
<!DOCTYPE html> <html lang="en"> <head> <script type="text/javas ...
- 用Canvas实现动画效果
1.清除Canvas的内容 clearRect(x,y,width,height)函数用于清除图像中指定矩形区域的内容 <!doctype html> <html> <h ...
- 室内定位系列(二)——仿真获取RSS数据
很多情况下大家都采用实际测量的数据进行定位算法的性能分析和验证,但是实际测量的工作量太大.数据不全面.灵活性较小,采用仿真的方法获取RSS数据是另一种可供选择的方式.本文介绍射线跟踪技术的基本原理,以 ...
- 如何设置tomcat定时自动重启
,今天笔者就跟大家分享一下如何设置tomcat定时自动重启. 第一:把Tomcat6安装成windows 2003服务. 1.首先检查tomcat\bin目录下是否有service.bat文件,如图: ...
- 【转载】--仅用 []()+! 就足以实现几乎任意Javascript代码
最近在做CTF的题目,遇见了一个都是[]()+!这样的文件,于是百度了一下,发现这个博客对这个有解释. G Reader里Dexter同学的分享,来自sla.ckers.org的又一神作 点我测试 G ...