一、事务

(1)事务(Transaction),一般是指要做的或所做的事情。在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。

(2)事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。

原子性(atomicity)。一个事务是一个不可分割的工作单位。比如A向B转账1000元,那么这就一定要保证原子性(要么同时成功,要么同时失败)。

一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态,一致性与原子性是密切相关的。比如A向B转账,不可能A扣了钱,B却没收到(这就是非一致性)。

隔离性(isolation)。一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。比如A和C同时向B转账,那B同一时间只能和一个人交易(同时只能有一个交易在执行)。

持久性(durability)。持久性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。A向B转账,成功以后B的账户就存入了转账数额,在不做其他的操作前提下数据是永久性的。

二、Hibernate事务处理

(1)Hibernate事务处理

在Hibernate框架中,使用Transaction接口来维护了事务实现(JTA,JDBC)的抽象。

事务与Session相关联,并通过调用session.beginTransaction()实例化。

Transaction接口的方法如下:

void begin() 开始一个新的事务。

void commit() 结束工作单位,在FlushMode.NEVER中除外。

void rollback() 强制此事务回滚。

void setTimeout(int seconds) 它为由此实例开始的后续调用启动的任何事务设置事务超时。

boolean isAlive() 检查交易是否仍然存在。

void registerSynchronization(Synchronization s) 为此事务注册用户同步回调。

boolean wasCommited() 检查事务是否成功提交。

boolean wasRolledBack() 检查事务是否成功回滚。

(2)Hibernate事务绑定

Hibernate使用本地线程绑定事务(所以不能在一个线程中启动多个线程去操作不同的数据工作),当请求Service方法时打开通过Soring AOP 自动打开 Hibernate Session,启动事务,执行所有与数据相关的工作,结束事务并关闭Session。模式的关键是交易与交易之间的一对一关系 Session。

例子:

public Integer save(One one,Tow tow) {

oneDao.save(one);

towDao.save(tow);

return 1;

}

三、分布式事务

(1)JTA

在应用系统数据量越来越大时,系统数据就需要分布在不同的数据库中,当业务需求在多个数据库中做原子性操作时就可以选择JTA (Java Transaction API),JTA事务比JDBC事务更强大。一个JTA事务可以有多个参与者,而一个JDBC事务则被限定在一个单一的数据库连接。

(2)JTA原理

不同的数据库有不同的数据库供应商,JTA就是将这个不同的数据库管理起来,统一创建一个原子事务,全部成功即成功,一个不成功就回滚所有的操作(JTA还是较重量级)

(3)实例

Spring有很多的JTA框架,这里使用的是atomikos框架,具体代码请点击链接查看

四、分布式消息最终一致性事务

(1)最终一致性

当应用系统数据越来越庞大,最终数据的一致性成为了一个很好的解决方案,即能即时响应,又能很好的完成多个数据操作(但不能保证一定成功,可能过了一段时间最终却没有成功)。

(2)实现原理

当应用收到请求,应用会先将用户请求的数据保存到分布式消息中间件中,做一个保存操作。保存成功后就给用户返回提交成功信息。接着分布式消息中间件将请求在发送到不同的处理机器上,处理机器收到消息在进行业务处理。比如A给B转账,A先提交转账信息(已经扣款),然后消息被发送的分布式消息中间件上,消息中间件在发送到处理机器上面做处理,转账成功后则在给用户发送转账成功信息,不成功则把款退回去。

java事务_Java 事务详解相关推荐

  1. java 冒泡排序_Java冒泡排序详解

    Java冒泡排序 排序算法概述 所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作.排序算法,就是如何使得记录按照要求排列的方法.排序算法在很多领域得到相当地重视, ...

  2. java 内部类_Java——内部类详解

    说起内部类,大家肯定感觉熟悉又陌生,因为一定在很多框架源码中有看到别人使用过,但又感觉自己使用的比较少,今天我就带你具体来看看内部类. 内部类基础 所谓内部类就是在类的内部继续定义其他内部结构类. 在 ...

  3. java序列化_Java序列化详解

    什么是序列化? 在Java中,对象序列化表示将对象表示为字节序列.字节包括对象的数据和信息.可以将序列化的对象写入文件/数据库,然后从文件/数据库中读取并反序列化.代表对象及其数据的字节可用于在内存中 ...

  4. java 适配器_java 适配器模式 详解(带电源插座适配 例子)

    package com.zq.designpattern.adatper; /** * Created by zhengshouzi on 2015/10/26. */ //三孔插座的标准 inter ...

  5. Spring事务管理(详解+实例)

    写这篇博客之前我首先读了<Spring in action>,之后在网上看了一些关于Spring事务管理的文章,感觉都没有讲全,这里就将书上的和网上关于事务的知识总结一下,参考的文章如下: ...

  6. Spring进阶(五):Spring事务管理(详解+实例)

    文章目录 一.前言 二.核心接口 2.1 事务管理器 2.1.1 JDBC事务 2.1.2 Hibernate事务 2.1.3 Java持久化API事务(JPA) 2.1.4 Java原生API事务 ...

  7. php pdo使用事务,PHP内PDO事务使用步骤详解

    这次给大家带来PHP内PDO事务使用步骤详解,PHP内PDO事务使用的注意事项有哪些,下面就是实战案例,一起来看一下. 概要: 将多条sql操作(增删改)作为一个操作单元,要么都成功,要么都失败. 单 ...

  8. php事务 面向对象,PHP面向对象之事务脚本模式(详解)

    如下所示: /* 事务脚本模式: 类似于thinkphp中的model层,或者说就是操作数据库的类. 个人觉得实践中使用起来还是挺简单方便的,就是SQL语句写死了的话,灵活性就不够. 示例代码如下: ...

  9. 编程式事务管理(详解)

    第一章:编程式事务管理(详解) 1. 说明:Spring为了简化事务管理的代码:提供了模板类 TransactionTemplate,所以手动编程的方式来管理事务,只需要使用该模板类即可!! 2. 手 ...

  10. SQL Server事务隔离级别详解

    SQL Server事务隔离级别详解 标签: SQL SEERVER/MSSQL SERVER/SQL/事务隔离级别选项/设置数据库事务级别 SQL 事务隔离级别 概述 隔离级别用于决定如果控制并发用 ...

最新文章

  1. C# Window编程随记——ClickOnce程序部署
  2. 视学算法第六轮送书活动,16本高质量书免费拿走!
  3. centos7虚拟机使用docker搭建swoole环境
  4. hook java_Java 实现 Hook 对鼠标键盘监听 - 沐早'S NOTEBOOK - CSDN博客
  5. Study to Innovation 的一般步骤总结
  6. java web w3c_1.3 搭建Java Web开发环境
  7. eureka集群的两种配置方式:配置文件方式与DNS方式
  8. LINUX查询版本情况
  9. Powerbuilder 12.5 下载地址
  10. TCL嵌入式测试技术在Comware V7系统中的应用
  11. php5.6.40 在 win10下安装全过程 ( 图文教程、附官方下载链接 )
  12. 关于RAID磁盘阵列与阵列卡的介绍 —— 做一个懂它的男人
  13. php怎么实现收藏夹功能,前端--收藏功能的实现
  14. 结巴分词 java_Java版结巴分词自定义词库
  15. 查理·芒格提炼的9个思维模型
  16. STM32F103系列的单片机定时器
  17. No fallback instance of type class错误的解决方案
  18. Android 全面屏处理(适配挖孔屏、刘海屏) kotlin
  19. 基恩士协议转换网关WTGNet-KV
  20. Elasticsearch CCR源码分析(补充)

热门文章

  1. Tera Term和TTL(Tera Term Language)
  2. IE Adobe Flash Player版本已是最新,界面仍然提示版本过旧原因
  3. 安全基础--21--安全运维
  4. 亚马逊大赛:AI与人聊天20分钟就能赢百万美元 | 揭秘
  5. 推荐 5 款良心网盘,免费、空间大、不限速!
  6. PHP从入门到精通pdf
  7. 工具说明书 - 滚动截屏和录屏软件ShareX
  8. PHP家庭账单系统,家庭财务管理系统1.0【PHP版】
  9. 多任务学习-Multitask Learning概述
  10. javaScript、PHP连接外卖小票机打印机方案(佳博、芯烨等)