文档章节

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
杭州
程序员
私信 提问
Minidao_1.6.1版本发布,超轻量Java持久化框架

Minidao_1.6.1版本发布了,超轻量Java持久化框架 升级日志 1,修复minidao参数不支持下划线问题 2,修复minidao接口定义返回类型为基本数据类型,无法传参数问题 3,拓展灵活性,通过sql判断...

Jeecg
2016/09/12
1K
5
Midao JDBC 0.9.4 发布,JDBC 工具包

Midao JDBC 0.9.4 是一个维护版本,包含大量的重构,废弃了一些类,以及一些类修改了名称。 Midao JDBC 简化了 JDBC 的开发,特点是灵活、可定制、简单直观,提供大量的功能,包括事务处理、...

oschina
2013/08/03
1K
4
Oracle和MySQL数据库的比较

本次使用Oracle11g和MySQL5.0作比较,目的是为了整理和巩固所学的数据库知识,也为了加深印象.(本人菜鸟,请大神们多多指教) 不同点 所占内存不同 Oracle11g在官网上下载的时候显示大约2g大小的...

青椒炒盖饭
2018/12/19
0
0
Midao JDBC 0.9.5 发布,JDBC 工具包

Midao JDBC 0.9.5 增加四个新的输入处理器允许直接通过参数进行配置,一个非常强大的处理器允许加载和执行查询,支持从外部 XML 文件读取并处理配置参数等. Midao JDBC 简化了 JDBC 的开发,...

oschina
2013/10/23
1K
7
Spring引用Tomcat的 JTA事务

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

崔耀升
2010/06/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周一乱弹 —— 白掌柜说了卖货不卖身

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @爱漫爱 :这是一场修行分享羽肿的单曲《Moony》 手机党少年们想听歌,请使劲儿戳(这里) @clouddyy :开不开心? 开心呀, 我又不爱睡懒觉…...

小小编辑
今天
7
0
大数据教程(11.7)hadoop2.9.1平台上仓库工具hive1.2.2搭建

上一篇文章介绍了hive2.3.4的搭建,然而这个版本已经不能稳定的支持mapreduce程序。本篇博主将分享hive1.2.2工具搭建全过程。先说明:本节就直接在上一节的hadoop环境中搭建了! 一、下载apa...

em_aaron
今天
2
0
开始看《JSP&Servlet学习笔记》

1:WEB应用简介。其中1.2.1对Web容器的工作流程写得不错 2:编写Servlet。搞清楚了Java的Web目录结构,以及Web.xml的一些配置作用。特别是讲了@WebServlet标签 3:请求与响应。更细致的讲了从...

max佩恩
今天
4
0
mysql分区功能详细介绍,以及实例

一,什么是数据库分区 前段时间写过一篇关于mysql分表的的文章,下面来说一下什么是数据库分区,以mysql为例。mysql数据库中的数据是以文件的形势存在磁盘上的,默认放在/mysql/data下面(可...

吴伟祥
今天
3
0
SQL语句查询

1.1 排序 通过order by语句,可以将查询出的结果进行排序。放置在select语句的最后。 格式: SELECT * FROM 表名 ORDER BY 排序字段ASC|DESC; ASC 升序 (默认) DESC 降序 1.查询所有商品信息,...

stars永恒
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部