事务管理

spring的事务管理

こ雲淡風輕ζ 提交于 2019-12-04 13:39:30
目录 spring事务管理 xml实现 注解实现 spring事务管理 spring的事务管理是把事务由DAO层提升到service层来管理;它实际上是对于AOP思想的应用。我们只需要配置好平台事务管理器这一个“切面”就可以了; spring中“平台事务管理接口”负责完成事务的提交和回滚;接口图解如下: 对于 JDBC和Mybatis可以对“DataSourceTransactionManager” 这个事务管理接口的实现类进行配置; 如下是配置JDBC事务管理 xml实现 <!--注册平台事务管理器:切面/顾问--> <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <!--引用自己配置的数据库--> <property name="dataSource" ref="myDataSource"/> </bean> <!--注册事务通知--> <tx:advice id="txAdvice" transaction-manager="txManager"> <!--指定连接点--> <tx:attributes> <!--可以设置事务隔离级别,和传播行为--> <tx:method name="open*" isolation="DEFAULT

Apache ServiceComb Pack 微服务分布式数据最终一致性解决方案

有些话、适合烂在心里 提交于 2019-12-04 11:03:48
https://github.com/OpenSagas-csharp/servicecomb-pack-csharp Saga基本使用指南 使用前置条件说明 如果还有同学对Saga还不甚了解的同学,可以参考Saga官方中文地址 地址 ,同时可以参考此项目贡献者之一的 WithLin 的一篇中文说明文章,该地址如下: 地址 ,文章由浅入深的讲述了分布式事务在微服务场景下的重要性,以及Saga对分布式事务的大致实现方式和后续的思考 必须 你需要可用的一个本地或者远程的数据库(mysql或者postpresql)作为Saga持久化分布式事务事件的持久化存储,当然只要官方支持的Database Provider即可,具体idea数据库配置如下图,注意数据库的名字与您真实数据库名一致 必须 成功启动alpha-server,导致环境搭建以及部署颇为麻烦,后期官方将会提供image上传docker hub提供给大家使用,启动成功参考下图 可选 同时saga提供了UI可视化界面,直接idea中启动saga-web即可 支持docker-compose:根目录提供了一个dockercompose文件,只需要在工程的根目录下执行docker-compose up -d 即可,上面的操作可以给感兴趣的调试环境的搭建。 开始玩转分布式事务Saga 克隆当前项目

脏读、幻读和不可重复读 + 事务隔离级别

拥有回忆 提交于 2019-12-04 07:15:45
1. 脏读 : 脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据 。 e.g. 1.Mary的原工资为1000, 财务人员将Mary的工资改为了8000(但未提交事务) 2.Mary读取自己的工资 ,发现自己的工资变为了8000,欢天喜地! 3.而财务发现操作有误,回滚了事务,Mary的工资又变为了1000 像这样,Mary记取的工资数8000是一个脏数据。 2. 不可重复读 :是指在一个事务内,多次读同一数据。在这个事务还没有结束时,另外一个事务也访问该同一数据。那么,在第一个事务中的两次读数据之间,由于第二个事务的修改,那么第一个事务两次读到的的数据可能是不一样的。这样 在一个事务内两次读到的数据是不一样的,因此称为是不可重复读 。 e.g. 1.在事务1中,Mary 读取了自己的工资为1000,操作并没有完成 2.在事务2中,这时财务人员修改了Mary的工资为2000,并提交了事务. 3.在事务1中,Mary 再次读取自己的工资时,工资变为了2000 解决办法:如果只有在修改事务完全提交之后才可以读取数据,则可以避免该问题。 3. 幻读 : 是指当事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。同时

abp学习(二)

萝らか妹 提交于 2019-12-04 06:29:20
翻译下首页截图的标签: DDD Base Classes 介绍: 应用程序代码库的分层是一种被广泛接受的技术,可帮助降低复杂性并提高代码重用性。为了实现分层架构,ASP.NET样板遵循域驱动设计的原则。 Domain Driven Design Layers 域驱动设计 (DDD) 中有四个基本层: 表示层:为用户提供接口。使用应用程序层实现用户交互。 应用程序层:在演示文稿层和域层之间起中介作用。协调业务对象以执行特定的应用程序任务。 领域层:包括业务对象及其规则。这是应用程序的核心。 基础设施层:提供通用技术功能,主要使用第三方库支持更高层。 总结:可以点进去看,这里只写了很少的一部分,具体页面还要一个很大的图片,并且配有讲解。 Repositories 存储库模式"使用类似于集合的接口访问域对象,在域和数据映射层之间进行中介"(马丁·福勒)。 实际上,存储库用于对域对象(实体和值类型)执行数据库操作。通常,每个实体(或聚合根)都使用单独的存储库。 在ASP.NET样板,仓库类实现 IRepository<TEntity, TPrimaryKey> interface。 ABP可以自动创建为每个实体类型的默认库。 您可以直接 inject IRepository<TEntity> (or IRepository<TEntity, TPrimaryKey>).

mysql的undo log和redo log

心不动则不痛 提交于 2019-12-04 04:48:37
1.1 undo是什么 undo日志用于存放数据修改被修改前的值,假设修改 tba 表中 id=2的行数据,把Name='B1' 修改为Name = 'B2' ,那么undo日志就会用来存放Name='B'的记录,如果这个修改出现异常,可以使用undo日志来实现回滚操作,保证事务的一致性。 1.2 undo参数 MySQL跟undo有关的参数设置有这些: show global variables like '%undo%'; innodb_max_undo_log_size 控制最大undo tablespace文件的大小,当启动了innodb_undo_log_truncate 时,undo tablespace 超过innodb_max_undo_log_size 阀值时才会去尝试truncate。该值默认大小为1G,truncate后的大小默认为10M。 innodb_undo_tablespaces 设置undo独立表空间个数,范围为0-128, 默认为0,0表示表示不开启独立undo表空间 且 undo日志存储在ibdata文件中。该参数只能在最开始初始化MySQL实例的时候指定,如果实例已创建,这个参数是不能变动的,如果在数据库配置文 件 .cnf 中指定innodb_undo_tablespaces 的个数大于实例创建时的指定个数,则会启动失败,提示该参数设置有误。

Oracle的数据库的两种临时表

烈酒焚心 提交于 2019-12-03 23:50:08
我们在创建数据表的时候,若没有特殊的指明,那么我们创建的表是一个永久的关系型表格,也就是说,这个表格中对应的数据,除非是我们显示的删除的话,表中的数据是永远都存在的。 相对应的,在 Oracle 数据库中还有一种类型的表,叫做临时表。这个临时表跟永久表最大的区别就是表中的数据不会永远的存在。当一个会话结束或者事务结束的时候,这个临时表中的数据,不用用户自己删除,数据库自己会自动清除。 1 、 事务临时表的管理。 (1) 事务临时表的创建。 Oracle 数据库根据临时表的性质不同,可以分为事务临时表与会话临时表。事务临时表是指数据只有在当前事务内有效。一般情况下,如果在创建数据表的时候,没有特殊指明这表是会话临时表的话,则该表默认为事务临时表。 我们可以以下面的语句创建事务临时表。 Create global temporary table Temp_user    (ID NUMBER(12) Primary key ,name varchar2(10)); 这个创建临时表的语句中,虽然没有显性的指明该表是事务临时表,但是,默认的情况下,若没有指明是什么临时表的话, 系统默认是事务临时表 。我们要创建事务临时表时,可以不指定关键字。但是,这查看起来比较麻烦。我建议,无论在建立什么临时表,都要利用具体的关键字来显形的指明,这大家看起来都方便。一般可以利用 ON COMMIT

oracle 用户与表空间关系

北城余情 提交于 2019-12-03 22:47:44
转: oracle 用户与表空间关系 oracle用户与表空间关系 用户=商家 表=商品 表空间=仓库 1. 1个商家能有很多商品,1个商品只能属于一个商家 2. 1个商品可以放到仓库A,也可以放到仓库B,但不能同时放入A和B 3. 仓库不属于任何商家 4. 商家都有一个默认的仓库,如果不指定具体仓库,商品则放到默认的仓库中 oracle中用户的所有数据都是存放在表空间中的,很多个用户可以共用一个表空间,也可以指定一个用户只用某一个表空间。 表空间:创建表空间会在物理磁盘上建立一个数据文件,作为数据库对象(用户、表、存储过程等等)的物理存储空间; 用户:创建用户必须为其指定表空间,如果没有显性指定默认表空间,则指定为users表空间;创建用户后,可以在用户上,创建表、存储过程等等其他数据库对象; 表:是数据记录的集合; 创建过程: 表空间--->用户--->表; 所属关系: 表空间 包含 用户 包含 表; http://www.cnblogs.com/cici-new/archive/2012/12/25/2831740.html 1.首先是ORACLE的整体结构。 oracle中的一个数据库就是一个实例. oracle的一个用户就是一个Schema(即方案). oracle的结构是===           实例->用户->表(用户属于数据库实例,表属于某个用户)

数据库原理(日志系统原理)[转]

被刻印的时光 ゝ 提交于 2019-12-03 21:34:47
ref: https://blog.csdn.net/whyangwanfu/article/details/1926367 事务的原语操作 在事务系统的运行当中,有三个地址空间供元素存储: 磁盘空间 缓冲区 事务的局部地址空间。 一个简单的读、修改X元素操作的流程如:事务到缓冲中读取元素X,如果命中,则读取事务局部地址空间并返回,如果未命中,则先将相关页从磁盘读入缓冲区。事务在它的局部地址空间中修改元素X,然后写入缓冲区,再从缓冲区写入磁盘。当然缓冲区的数据也可能不是立即拷贝入磁盘的,这取决于具体的缓冲区管理策略。 为了便于描述,我们描述了4个操作原语: INPUT(X) :将包含数据库元素X的磁盘块拷贝到内存缓冲区 READ(X,t) :将数据库元素X拷贝到事务的局部变量t。更准确地说,如果包含数据库元素X的块不在内存缓冲区中,则首先执行INPUT(X)。接着将X的值赋给局部变量t。 WRITE(X,t) :将局部变量t的值拷贝到内存缓冲区中的数据库元素X。更准确地说,如果包含数据库元素X的块不在内存缓冲区中,则首先执行INPUT(X)。将着将t的值拷贝到缓冲区中的X。 OUTPUT(X) :将包含X的缓冲区拷贝到回磁盘。 undo日志 如果系统崩溃,恢复管理器就被激活,检查日志以重建数据库的一致性状态。恢复时,有些事务的工作将会重做,它们写到数据库的新值会重写一次

深入浅出hibernate总结

大城市里の小女人 提交于 2019-12-03 21:23:08
一、总括 1、sessionFactory与session (1)sessionFactory:一个数据库对应一个factory,线程安全、单例,一般随应用开启和关闭。 (2)session:非线程安全,管理connection(池) session对于sessionFactory的关系相当于conn对于jdbc的关系,但session不等同于connection。 (3)另外,一般是一个session对一个事务。 2、hibernate不适合的场景 (1)复杂查询/大批量数据导出 (2)批量修改/删除 (3)实体关系过于复杂 3、连接池与prepareStatement池的原理 连接池,在getConn与closeConn的时候,不是真正的创建和关闭,采用代理拦截,在get的时候,从池中拿,如果有则返回,没有则创建一个返回,归还的时候,如果池没有满,则放入池中,如果满了,则真正关闭。 (补上示例代码) prepareStatement池的原理就是缓存ps语句,不让其随着conn的关闭而失效。步骤就是拦截ps的close方法,然后每次create的时候,从池中查找,如果有则返回,没有则创建,每次close的时候,看池有没有满,如果有满,则关闭,没有则放入池中。 (补上示例代码) 4、hibernate configure的配置 Configuration cfg=new

oracle闪回版本和闪回事务查询 详解

做~自己de王妃 提交于 2019-12-03 18:14:30
--- 说明闪回数据库 --- 使用闪回表将表内容还原到过去的特定时间点 --- 从删除表中进行恢复 --- 使用闪回查询查看截止到任一时间点的数据库内容 --- 使用闪回版本查询查看某一行在一段时间内的各个版本 --- 使用闪回事务查询查看事务处理历史记录或行 优点 : 闪回技术由于只能处理更改数据,所以从根本上改变了恢复技术。使用这个技术时,从错误中恢复花费的时间等于制造错误所花费的时间。当闪回技术使用时,它与介质恢复相比,在易用性、可用性和还原时间方面有明显的优势。 闪回数据库使用闪回日志执行闪回。闪回删除使用回收站。其他所有功能都使用还原数据。 闪回时间浏览 闪回技术提供的功能可用于查询方案对象的过去版本、查询历史记录数据以及执行更改分析。每个事务处理在逻辑上都会生成新版本数据库。使用闪回技术,可通过浏览这些版本来查找错误以及原因。 · 闪回查询:查询特定时间点的所有数据。 · 闪回版本查询:查看两个时间之间行的所有版本已经更改了行的事务处理。 · 闪回事务处理查询:查看事务处理做的所有更改。 使用闪回查询功能时,可以对自特定时间起的数据库执行查询。通过使用select语句的 as of 子句,可指定要查看其数据的时间戳。这有助于分析数据差异。 实验一:闪回查询 实验一:闪回查询:as of timestamp SYS@ORCL>conn tyger/tyger