事务

Spring 事务处理

点点圈 提交于 2020-01-15 00:49:13
前言: 事务处理的本质 在学习事务处理前,需要明确一点: 数据库操作最终都要使用到JDBC,那么无论上层如何封装,底层都是调用Connection的commit,rollback来完成 烦人的事务处理: 在日常开发中,数据访问层(DAO)必然需要进行事务的处理,但是我们会发现,事务处理的代码通常是简单的重复的,编写这样的重复代码会浪费大量的时间,所以我们需要找到一种方案可以将这些重复的代码进行抽取,以便与管理维护和复用, 我们的需求:在一系列数据库操作上的方法上增加额外的事务处理代码,让原来的方法中只关注具体的数据处理,即在原本以及存在的数据库操作方法上添加额外的事务处理逻辑 到这里你应该想到AOP了,没错! 这样的场景下AOP是最好的解决方案; 解决方案:AOP 回顾一下Spring的AOP:在结合目前的需求 1.将目标对象(DAO)放入Spring容器 2.告知Spring你的通知代码是什么(事务处理) 3.告知Spring 哪些方法(DAO的CRUD)要应用那些通知(不同的事务处理代码) 4.从Spring中获取代理对象来完成原本的CRUD,代理对象会自动完成事务处理 Spring 事务处理API Spring作为框架,需要进行详细的设计,全方位的考虑事务处理的各个方面,而不仅是简单的帮你执行commit,rollback; Spring对事务处理进行了抽象定义

mysql 空事务

淺唱寂寞╮ 提交于 2020-01-14 23:49:25
今天遇到mysql锁表,出现空事务。查找了很多问题不知道这个空事务是怎么产生的,先记录一下 来源: CSDN 作者: qq13650793239 链接: https://blog.csdn.net/qq13650793239/article/details/103976858

MySQL-锁

微笑、不失礼 提交于 2020-01-14 22:07:13
MySQL-锁 文章目录 MySQL-锁 锁的分类 按照功能分 按照锁的粒度分 全局锁 表锁 表读锁 表写锁 行锁 快照读与当前读 加锁方式 加锁方式选择 间隙锁 MVCC和间隙锁 元数据锁 元数据锁导致的阻塞 锁的分类 按照功能分 共享锁(读锁/S锁) 其他不可获得X锁 所有连接均可读取,所有连接均不可修改 排他锁(写锁/X锁) 其他不可获得S/X锁 加锁连接可以读取可以修改,其他连接均不可读写 按照锁的粒度分 全局锁 、 表锁 、 行锁 等… 全局锁 MySQL全局锁会使用 读锁 锁定 所有库中所有的表 。 加锁: FLUSH TABLES WITH READ LOCK; 解锁: UNLOCK TABLES; 全局锁加锁后,所有的连接只能读表,加锁的连接进行表中数据的修改会报错。其他连接进行数据修改会阻塞,直到全局锁解锁后返回。一般用在整个库做备份时。 表锁 MySQL表锁在事务需要 更新大表的大部分或全部数据时 。如果使用行锁加锁效率极低,因此这种情况下一般使用表锁,事务涉及多个表时可能会因此死锁,也可以考虑使用表锁来避免死锁。 表锁分为 表读锁 和 表写锁 : 表读锁 lock tables t read; 表读锁时所有连接都可以读,本连接修改会报错,其他连接修改会阻塞,直到锁释放才返回。 表写锁 lock tables t write; 表写锁时,本连接可以读和写

[分布式数据库]数据分片

◇◆丶佛笑我妖孽 提交于 2020-01-14 19:42:51
学生阶段,但凡要做个“系统”,总绕不开的就是数据库。项目中的一些关键数据,通过持久化到数据库,保障系统的可靠性。我们接触最多的就是类似于Oracle、Mysql等数据库。 其实上了班,依旧还是没能绕过数据库,只不过不再单一的将数据存储在关系型数据库,更多的通过其他形式,例如NoSQL,以减少数据库的访问,但是NoSQL依旧无法对关系型数据库致命一击以完全替代关系型数据库,关键的数据持久化依旧还是要存放在数据库。随着国家号召自主可控,Oracle也需要渐渐从主流中剔除(成本和历史的必然)。但是这里还是要说一句,Oracle依旧是关系型数据库中的大佬,别的数据库都只能通过调优的形式去接近Oracle的处理能力却难以超越它。 文章目录 背景介绍 数据分片 垂直分片 水平分片 存在的问题 背景介绍 传统的将数据集中存储至单一数据节点的解决方案,在 性能 、 可用性 和 运维成本 这三方面已经难于满足互联网的海量数据场景。 性能 方面,由于关系型数据库大多采用B+树模型,导致数据量超过阈值的情况下,索引深度的增加导致磁盘IO访问次数增加,导致查询性能下降;同时高并发的访问请求也使得集中式数据库成为系统最大的瓶颈。 可用性 方面,服务化的无状态能达到较小成本的随意扩容,但是导致所有压力都落在数据库,单一架构甚至简单的主从模式已经无力支撑。 运维成本 方面考虑,当数据库达到单一数据库的阈值

SqlServer事务日志满的解决方案

本小妞迷上赌 提交于 2020-01-14 13:35:41
这是微软社区精英项目传过来的一个案例。 我当时给了解决方案。 问题描述: 环境说明: 操作系统 win2003 数据库 SQL SERVER 2000 SP4 数据库数据大小 150GB左右 具体故障描述: 连接门户系统 提示无法连接到配置服务器 去服务器本地查看 右下角提示 数据库所在的磁盘已满 于是把SQL服务停掉 该磁盘立即有十几GB的空间释放 重新启动SQL服务 连接门户系统 依然提示无法连接配置数据库 在SQL控制台连接该数据库也是连不上 门户系统共三台服务器 : 10.205.1.6 应用系统服务器 SharePoint 10.205.1.7 门户DB 服务器 数据库服务器 SQL 2000 10.205.1.5 DC服务器 出现该错误的是10.205.1.7 数据库服务器 错误截屏: 解决方案: 这个问题初步看起来是SharePoint_Config和tempdb数据库的日志文件占用过大空间,以致于所在磁盘空间满了。 要解决这个问题,要稍微麻烦点。因为磁盘空间已满,SqlServer服务有可能无法正常启动。先不要让应用程序连接数据库,SharePoint也不要连接数据库。试着启动SqlServer服务。看看能否启动起来。如果不能,需要腾出来一点空间来。删除一些暂时不要的软件。总之要让SqlServer服务启动起来。如果SqlServer服务能起来,就做下面的。

Spring面试,IoC和AOP的理解

删除回忆录丶 提交于 2020-01-14 11:14:05
spring 的优点? 1.降低了组件之间的耦合性 ,实现了软件各层之间的解耦 2.可以使用容易提供的众多服务,如事务管理,消息服务等 3.容器提供单例模式支持 4.容器提供了AOP技术,利用它很容易实现如权限拦截,运行期监控等功能 5.容器提供了众多的辅助类,能加快应用的开发 6.spring对于主流的应用框架提供了集成支持,如hibernate,JPA,Struts等 7.spring属于低侵入式设计,代码的污染极低 8.独立于各种应用服务器 9.spring的DI机制降低了业务对象替换的复杂性 10.Spring的高度开放性,并不强制应用完全依赖于Spring,开发者可以自由选择spring的部分或全部 什么是DI机制? 依赖注入(Dependecy Injection)和控制反转(Inversion of Control)是同一个概念,具体的讲:当某个角色需要另外一个角色协助的时候,在传统的程序设计过程中,通常由调用者来创建被调用者的实例。但在spring中创建被调用者的工作不再由调用者来完成,因此称为控制反转。创建被调用者的工作由spring来完成,然后注入调用者 因此也称为依赖注入。 spring以动态灵活的方式来管理对象 , 注入的两种方式,设置注入和构造注入。 设置注入的优点:直观,自然 构造注入的优点:可以在构造器中决定依赖关系的顺序。 什么是AOP?

杭-Spring/Spring MVC

回眸只為那壹抹淺笑 提交于 2020-01-14 08:56:34
Spring 1、Spring是什么? Spring是一个轻量级的IoC和AOP容器框架。是为Java应用程序提供基础性服务的一套框架,目的是用于简化企业应用程序的开发,它使得开发者只需要关心业务需求。常见的配置方式有三种:基于XML的配置、基于注解的配置、基于Java的配置。 主要由以下几个模块组成: Spring Core:核心类库,提供IOC服务; Spring Context:提供框架式的Bean访问方式,以及企业级功能(JNDI、定时任务等); Spring AOP:AOP服务; Spring DAO:对JDBC的抽象,简化了数据访问异常的处理; Spring ORM:对现有的ORM框架的支持; Spring Web:提供了基本的面向Web的综合特性,例如多方文件上传; Spring MVC:提供面向Web应用的Model-View-Controller实现。 2、Spring 的优点? 答:1.降低了组件之间的耦合性 ,实现了软件各层之间的解耦 2.可以使用容易提供的众多服务,如事务管理,消息服务等 3.容器提供单例模式支持 4.Spring提供了AOP技术,支持将一些通用任务,如安全、事务、日志、权限等进行集中式管理,从而提供更好的复用。 5.容器提供了众多的辅助类,能加快应用的开发 6.spring对于主流的应用框架提供了集成支持,如hibernate,JPA

spring

被刻印的时光 ゝ 提交于 2020-01-14 08:09:01
springmvc常用注解和spring事务的四大特性、事务的传播特性 1.SpringMVC常用注解 RequestParam RequestBody PathVaribale CookieValue ModelAttribute SessionAttribute 2.事务四大特性 ⑴ 原子性(Atomicity)   原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,这和前面两篇博客介绍事务的功能是一样的概念,因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响。 ⑵ 一致性(Consistency)   一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。 拿转账来说,假设用户A和用户B两者的钱加起来一共是5000,那么不管A和B之间如何转账,转几次账,事务结束后两个用户的钱相加起来应该还得是5000,这就是事务的一致性。 ⑶ 隔离性(Isolation)   隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。 即要达到这么一种效果:对于任意两个并发的事务T1和T2,在事务T1看来,T2要么在T1开始之前就已经结束,要么在T1结束之后才开始

rocketMQ之十 事务

倾然丶 夕夏残阳落幕 提交于 2020-01-14 08:07:23
事务 事务消息的发送和提交 发送消息(half消息) 服务端响应消息写入结果 根据发送结果执行本地事务(如果写入失败,辞职half消息对业务不可见,本地逻辑不执行) 根据本地事务状态进行Commit或Rollbace(commit之后对消费者可见) 事务补偿 对没有commit/rollback的事务消息(pending状态的消息),从服务端发起一次回查 producer收到回查消息,检查回查消息对应的本地事务的状态 根据本地事务状态,重新commit或者rollback 补偿阶段是用来解决消息commit或rollback发生超时或失败的情况 事务消息状态 TransactionStatus.CommitTransaction:提交事务,允许消费者消费此消息 TransactionStatus.RollbackTransaction:回滚事务,该消息将被删除,不允许被消费 TransactionStatus.Unknown:中间状态,需要检查消息队列来确定状态 生产者 public class DefaultProducer { public static void main(String[] args) throws Exception { TransactionListrnerImpl listrner = new TransactionListrnerImpl(); /