文档章节

java事务处理

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

什么是事务呢?事务有哪些特性呢? (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
杭州
程序员
[转]Spring引用Tomcat的 JTA事务

Spring引用Tomcat的JTA事务 Tomcat是Servlet容器,但它提供了JNDI的实现,因此用户可以象在Java EE应用程序服务器中一样,在Tomcat中使用JNDI查找JDBC数据源。在事务处理方面,Tomcat本身并不...

穿越星辰
2011/06/03
0
0
Spring引用Tomcat的 JTA事务

Spring引用Tomcat的 JTA事务 Tomcat是Servlet容器,但它提供了JNDI的实现,因此用户可以象在Java EE应用程序服务器中一样,在Tomcat中使用JNDI查找JDBC数据源。在事务处理方面,Tomcat本身并...

崔耀升
2010/06/12
0
0
JAVA之JDBC简单事务处理

1、什么是Java事务 通常观念认为,事务与数据库有关。事务是访问数据库的一个操作序列,数据库应用系统通过事务集来完成对数据库的存取。事务的正确执行使得数据库从一种状态转换成另一种状态...

火龙战士
2015/08/17
0
5
几个著名的Java开源缓存框架

OSCache   OSCache是个一个广泛采用的高性能的J2EE缓存框架,OSCache能用于任何Java应用程序的普通的缓存解决方案。 OSCache有以下特点:缓存任何对象,你可以不受限制的缓存部分jsp页面或...

learn_more
2015/03/16
0
2
J2EE 框架 - Spring

Spring Framework 是一个开源的 Java/Java EE 全功能栈(full-stack)的应用程序框架,以 Apache 许可证形式发布,也有 .NET 平台上的移植版本。该框架基于 Expert One-on-One Java EE Desi...

匿名
2008/09/07
0
77

没有更多内容

加载失败,请刷新页面

加载更多

Coding and Paper Letter(二十四)

资源整理。这一次内容有点多,拆为两篇,这一篇主要针对Coding。 Coding: 1.R语言包geex,用于估计参数的框架和来自R中的一组无偏估计方程(即M-估计)的经验夹层协方差矩阵。 geex 2.R语言...

胖胖雕
14分钟前
0
0
Python中使用SQLite

SQLite: SQLite是一种数据库,Python中集成了SQLite3,所以在Python中使用SQLite,可以直接导入SQLite包,不需要做额外的配置。 更多的SQLite简介和相关知识可以查看专门的教程:http://ww...

akane_oimo
16分钟前
0
0
05《Java核心技术36讲》之几种字符串类有什么区别?

一、提出问题 今天,我们来聊聊日常使用的字符串,别看它似乎很简单,但其实字符串几乎在所有编程语言里都是个特殊的存在,因为不管是数量还是体积,字符串都是大多数应用中的重要组成。 今天...

飞鱼说编程
34分钟前
0
0
Univalsal_ImageLoader源码结构与创建者模式 初步小结

最近在回归看Univalsal_ImageLoader源码,本想自己也实现试试写一个,看源码是为了学习看能否使用,助于自己可以写出有自己逻辑结构的代码。 首先我们初始化ImageLoader的配置初始化的时候,...

DannyCoder
今天
0
0
计算卷积神经网络浮点数运算量

前言 本文主要是介绍了,给定一个卷积神经网络的配置之后,如何大概估算它的浮点数运算量。 相关代码:CalFlops,基于MXNet框架的 Scala 接口实现的一个计算MXNet网络模型运算量的demo。 正文...

Ldpe2G
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部