事务处理: databse jdbc mybatis spring
事务的认识需要一个相当漫长的流程,慢慢在实践中理解,然后在强化相关理论基础。
数据库中的事务:
传统的本地事务处理都是依靠数据库自身事务处理能力,而事务本身是传统关系型数据库的基石。简单来说事务就是一些满足acid特性的sql,数据库通过锁和日志实现这些机制。国内的mysql中innodb事务引擎引料众多,也有很多文章让我们深刻理解索引和事务的概念。此处简单说一下我的理解;
A:代表原子性,最好理解,要么全做,要么全不做。
C:一致性,简单来说就是你扣了50,有人就加了50(一致性本身存在好多种类,传统理解数据库是强一致性)
I:隔离性,事务之间的可见行,说起来很抽象,其实看看4中隔离性级别,做个实验,就很好理解了。比如市面上大多数数据库默认隔离性级别是读已提交数据,所以只有其他事务提交之后的更新你才能感知到。
但是这里面有个好玩,也是核心交易创建支付单用来判重用的,如果一个事务A插入一条数据,另外一个事务B插入同一条数据(主键相同),即使另外一个事务没提交,也会抱主键冲突。这个很好玩。可以实验尝试。
D:持久性,一旦提交,不会丢失。但是谁能保证一定不会丢失呢,天灾人祸。其实这一点,就是把事务日志提交持久化redo日志中,即使断电,内存中数据没有持久化到磁盘,利用redo日志恢复,咋恢复的,以前学习用的ARIES Recovery Algorithm。
jdbc中的事务
对于java 程序员而言,是不需要直接使用那些sql操作数据库的,我们使用jdbc, 每个数据库厂商都会为一些编程语言提供驱动,听起来高端,其实就是一个跟数据库通信的api ,内部通过数据库自己的协议通信。jdbc是一个标准接口,每个厂商各自实现,然后对于不同的数据库我们操作起来基本相同。架构如下图,最重要的就是这个Connection,我特地做了试验,想知道它什么东西。在msyql中show processlist 可以查看当前执行的线程,发现其实每个Connection对应一个处理线程,提交事务和回滚事务都是这个Connection处理,当然发送sql和接收结果集合都是它。所以本地事务处理还是靠数据库本身。

jdbc驱动的架构
jdbc驱动要实现的接口都在jdk中的rt.jar中的package java.sql,idea的中的工具可以直接查看包内的类直接关系,很爽。看下图,当然还有另外一个图,是sql相关的异常,一个项目如何设置一个规范的异常体系,后期花时间总结。


spring事务处理(有待研究)
spring 的事务管理最终还是需要依赖数据库自身事务管理,但是它在业务层提供了一个很重要的功能就是事务的传播性。很好玩,一般在开发过程中,我门都是是用默认的传播机制。
分布式事务理论(有待研究)
CAP:
BASE :
一致性协议: 两阶段,三阶段,paxos方法(zookeeper基于此实现,太复杂不学),raft(号称简单而容易实现的一致性算法,准备细致的看看)
事务处理: databse jdbc mybatis spring的更多相关文章
- spring boot:配置shardingsphere(sharding jdbc)使用druid数据源(druid 1.1.23 / sharding-jdbc 4.1.1 / mybatis / spring boot 2.3.3)
一,为什么要使用druid数据源? 1,druid的优点 Druid是阿里巴巴开发的号称为监控而生的数据库连接池 它的优点包括: 可以监控数据库访问性能 SQL执行日志 SQL防火墙 但spring ...
- mybatis+spring事务
http://www.mybatis.org/spring/zh/transactions.html 第四章 事务 一个使用 MyBatis-Spring 的主要原因是它允许 MyBatis 参与到 ...
- springMVC+mybatis+spring整合案例
1.web.xml a:配置spring监听,使web容器在启动时加载spring的applicationContext.xml <listener> <listener-class ...
- SpringMVC+Mybatis+Spring整合
Maven引入需要的JAR包 pom.xml <properties> <!-- spring版本号 --> <spring.version>4.0.2.RELEA ...
- MyBatis学习(一)、MyBatis简介与配置MyBatis+Spring+MySql
一.MyBatis简介与配置MyBatis+Spring+MySql 1.1MyBatis简介 MyBatis 是一个可以自定义SQL.存储过程和高级映射的持久层框架.MyBatis 摒除了大部分的J ...
- myBatis,Spring,SpringMVC三大框架ssm整合模板
整合步骤 创建web工程 导入整合所需的所有jar包 编写各层需要的配置文件 1) mybatis的全局配置文件 <configuration> <!-- 批量别名的设置 -- ...
- 多个mapper location时, mybatis spring的自动扫描配置
1. MapperScannerConfigurer 里面的basePackage, 多个package用逗号分隔 2. SqlSessionFactoryBean里面的mapperLocations ...
- MyBatis详解 与配置MyBatis+Spring+MySql
MyBatis 是一个可以自定义SQL.存储过程和高级映射的持久层框架.MyBatis 摒除了大部分的JDBC代码.手工设置参数和结果集重获.MyBatis 只使用简单的XML 和注解来配置和映射基本 ...
- Springmvc + mybatis + spring 配置,spring事物
今天配置了半天,发现,事物不起效果,主要出现如下错误: org.mybatis.spring.transaction.SpringManagedTransaction] - [JDBC Connect ...
随机推荐
- Netty4.x中文教程系列(三) Hello World !详解
Netty 中文教程 (二) Hello World !详解 上一篇文章,笔者提供了一个Hello World 的Netty示例. 时间过去了这么久,准备解释一下示例代码. 1.HelloServer ...
- google 访问
http://maolihui.com/goagent-detail.htmlgoagent教程详细版https://aiguge.xyz/chrome-goagent-proxy-switchyom ...
- SSIS ->> Reliability And Scalability
Error outputs can obviously be used to improve reliability, but they also have an important part to ...
- 在 MapPath 的 Path 参数中不允许出现“..”字符。
找到IIS应用程序池,“设置应用程序池默认属性”->“常规”->”启用 32 位应用程序”,设置为 True. 这样我的问题就解决了..
- 纯java从apk文件里获取包名、版本号、icon
简洁:不超过5个java文件 依赖:仅依赖aapt.exe 支持:仅限windows 功能:用纯java获取apk文集里的包名,版本号,图标文件[可获取到流直接保存到文件系统] 原理:比较上一篇文章里 ...
- build.gradle(Project) 和 build.gradle(Module) 的区别
参考: http://stackoverflow.com/questions/28295933/difference-between-build-gradleproject-and-build-gra ...
- plsql programming 19 触发器
挂起语句, 是指数据库 Hang 到那不能动了, 触发的. 1. DML 触发器 这种类型的触发器对于开发人员都很常见, 其他类型的触发器主要是给DBA使用的. 配置触发器,我们需要回答以下问题: 触 ...
- non-overlapping-intervals
https://leetcode.com/problems/non-overlapping-intervals/ 其中还用到了Java的Comparator接口和其中的compare方法. packa ...
- Asp.net Web Api进行Nunit测试
有两种方式 1.模拟Web请求. 2.直接本地调用Api接口 但是由于本地直接调用没有模拟请求环境,所以request为null public static HttpResponseMessage C ...
- 线程——QQ邮件发送
一.造一个QQ邮件发送的窗体 二.开始编写关于邮件发送的代码,以及当点发送按钮的时候,给发送按钮单独造了一个新的线程.这样如果发送的附件太多的话,如果不给发送按钮造新的线程,便会卡住,但是如果给发送按 ...