文档章节

java事务处理

py890000
 py890000
发布于 2013/03/20 15:46
字数 761
阅读 160
收藏 0

精选30+云产品,助力企业轻松上云!>>>

什么是事务呢?事务有哪些特性呢? (ACID)

百科:http://baike.baidu.com/view/1298364.htm

 

java的事务模型有三种:

  • 1.本地事务模型

  • 2.编程事务模型

  • 3.声明事务模型

本地事务模型,我个人理解是 依赖JDBC 的Connection 事务设置的 ,我们一般写代码

Connection con =  null;
        con.setAutoCommit(false);
        Statement statement = con.createStatement();
        String sql = "update ....";
        try{
            statement.execute(sql);
            con.commit();
        }catch(Exception e){
            con.rollback();
            throw e;
        }finally{
            关闭连接
        }

主要是把Connection的自动提交事务的设置成false,让程序员代码方式来管理事务的 提交,这样很大的 依赖程序员的编码,以及后续对Connection 关闭的处理, 如果程序员忘记关闭连接,那就会造成内存泄露, 后果很严重的, 老大可是会很生气的,

编程事务模型和本地事务最大的区别是开发人员直接面对事务(transation),而不是Connection。在编程事务模型中,开发人员主要复杂开启事务和终止事务。虽然比本地事务对开发更友好了, 还是不推荐使用编程事务模型,(纯属吐槽: 可是我在的项目中,它恰恰也是用得这种事务模型, 说是用MYSQL 数据库对事务处理不好, 一个后台系统, 根本就没那么高的并发, 还把代码逻辑弄得一塌糊涂,事务都是用内部类来实现的,

声明事务模型完全由容器控制,这就意为作开发人员不用写任何事务代码。这种事务模型是比较推荐的 ,也是现在主流的架构师所推荐的。spring,ejb 都很好的支持这种事务模型, 只要在配置文件里配置一下, 对业务代码完全没什么污染

 

事务属性主要有六种,

  • Required 需要,如果上下文有个事务存在,则用这个,没有事务,则开启个新的事务(最常用的 )

  • Mandatory 强制必须,事先开启事务, 如果不存在,则抛出TransactionRequiredException异常

  • RequiresNew需要新的,每次都需要新的事务来支持, 如果事务已经开启了,此事务将被暂时挂起,容器启动一个新的事务。当这个新事务随着方法调用完成终止后,老的事务将会继续。

  • supports支持  并不需要特定的事务支持, 有就用, 没有就不用

  • NotSupported不支持  如果一个事务业已启动,容器会将此事务暂停直至方法调用结束。如果调用方法时没有事务存在,容器也不会为此方法开启任何事务

  • Never不用 不允许有事务存在

事务隔离级别

  • TransactionReadUncommitted 读取未提交

  • TransactionReadCommitted 读取已提交

  • TransactionRepeatableRead 可重复读

  • TransactionSerializable 可序列化

spring   @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED)

主要针对接口方法级别事务控制, 必须要抛出异常,  @Transactional 也是基于AOP,字节码增强技术来实现的


py890000
粉丝 2
博文 3
码字总数 1014
作品 0
杭州
程序员
私信 提问
加载中
请先登录后再评论。
Java学习需要学哪些内容?java相关技术介绍

学习Java需要学哪些内容?最全的java相关技术介绍 JDBC(Java Database Connectivity)提供连接各种关系数据库的统一接口,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接...

王囧草
2019/12/25
6
0
Java 学习目录

1、java基础(反复):effective java、java编程思想、refacting、源码 2、jvm:深入java虚拟机、深入理解java虚拟机--jvm高级特性和最佳实践 3、框架(中间件):spring(精通,aop,Ioc,事务处理...

microb
2014/01/27
8
0
Java Transaction API概述

JTA(Java Transaction API)允许应用程序执行分布式事务处理--在两个或多个网络计算机资源上访问并且更新数据。JDBC驱动程序的JTA支持极大地增强了数据访问能力。 本文的目的是要提供一个关于...

职通网
2011/04/28
73
0
jdbc如何处理事务

Connection提供了事务处理的方法,通过调用setAutoCommit(false)可以设置手动提交事务;当事务完成后用commit()显式提交事务;如果在事务处理过程中发生异常则通过rollback()进行事务回滚。除...

osc_rg5fngik
2019/08/23
2
0
java中事务的介绍

java的事务处理,如果对数据库进行多次操作,每一次的执行或步骤都是一个事务.如果数据库操作在某 一步没有执行或出现异常而导致事务失败,这样有的事务被执行有的就没有被执行,从而就有了事务的...

什么是程序员
2015/06/15
34
0

没有更多内容

加载失败,请刷新页面

加载更多

App Builder 2020中文版

教程: 1、断开网络连接,下载解压,运行对应操作系统App Builder 2020安装包; 2、在弹出的窗口中勾选同意条款协议,点击【Next】; 3、创建桌面快捷方式,点击【Next】; 4、一切准备就绪,...

osc_62a7f5bj
43分钟前
19
0
蚂蚁金服轻量级类隔离框架 Maven 打包插件解析 | SOFAArk 源码解析

SOFAStack(Scalable Open Financial Architecture Stack)是蚂蚁金服自主研发的金融级云原生架构,包含了构建金融级云原生架构所需的各个组件,是在金融场景里锤炼出来的最佳实践。 本文为《...

SOFAStack
03/19
11
0
Java 高级 面试题 及 参考答案

一、面试题基础总结 1、 JVM结构原理、GC工作机制详解 答:具体参照:JVM结构、GC工作机制详解 ,说到GC,记住两点:1、GC是负责回收所有无任何引用对象的内存空间。 注意:垃圾回收回收的是无...

osc_np3y0rbq
44分钟前
10
0
面试准备季——MyBatis 面试专题(含答案)

写在前面:2020年面试必备的Java后端进阶面试题总结了一份复习指南在Github上,内容详细,图文并茂,有需要学习的朋友可以Star一下! GitHub地址:https://github.com/abel-max/Java-Study-...

osc_1ipdqsf2
46分钟前
8
0
Redis 高频面试题:10w+QPS 的 Redis 真的只是因为单线程和基于内存?

你以为 Redis 这么快仅仅因为单线程和基于内存? 那么你想得太少了,我个人认为 Redis 的快是基于多方面的:不但是单线程和内存,还有底层的数据结构设计,网络通信的设计,主从、哨兵和集群...

osc_qgfjs4a5
46分钟前
18
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部