网站的百度推广怎么做,嵌入式软件开发工程师工作内容,企业网站建设服务好,企业网站的制作公司1、什么是事务#xff08;Transaction#xff09;#xff1f; 事务是指逻辑上的一组操作#xff0c;要么全部成功#xff0c;要么全部失败。 事务是指将一系列数据操作捆绑成为一个整体进行统一管理。如果某一事务执行成功#xff0c;则该事务中进行的所有数据更改均会提… 1、什么是事务Transaction 事务是指逻辑上的一组操作要么全部成功要么全部失败。 事务是指将一系列数据操作捆绑成为一个整体进行统一管理。如果某一事务执行成功则该事务中进行的所有数据更改均会提交成为数据库中的永久组成部分。如果事务执行时遇到错误必须取消或者回滚则数据将全部恢复到操作前的状态所有的数据的更改均被消除。 2.事务的特性 原子性事务是一个不可分割的工作单位事务中的操作要么都发生要么都不发生。 一致性事务前后的数据的完整性必须保持一致。 隔离性多个用户并发访问数据库一个用户的事务的执行不能被其他事务干扰多个并发事务之间的数据要相互隔离。 持续性一个事务一旦提交它对数据库中数据的改变就应该是永久性的即使数据库发生故障也不应该有任何影响。 3.事务并发操作带来哪些问题 丢失修改两个事务T1和T2读入同一个数据并修改T2提交的结果破坏了T1提交的结果导致T1的修改被丢失。 脏读一个事务读取了另一个事务改写但还未提交的数据若这些事务被回滚这个读取就是无效的。 不可重复读在同一事务中多次读取同一数据返回的结果有所不同读时数据发生了改变。 幻读一个事务读取了几行记录后另一个事务插入一些记录发生幻读。后来的查询中第一个事务发现一些原来没有的记录。 4、Spring事务管理API主要有3个 PlatformTransactionManager事务管理器 TransactionDefinition事务的定义信息隔离传播超时只读 TransactionStatus保存事务具体运作状态 5、PlatformTransactionManager 事务管理器 spring为不同的持久化框架提供了不同的PlatformTransactionManager。 不论 采用何种方式都必须先创建“事务管理器”的对象。 6、TransactionDefinition 定义事务隔离传播超时只读 设置隔离级别一组常量定义 mysql 默认REPEATABLE_READ、oracle默认 READ_COMMITTED 定义事务的传播行为 应用场景当我们调用一个基于Spring的Service接口方法如UserService#addUser()时它将运行于Spring管理的事务环境中Service接口方法可能会在内部调用其它的Service接口方法以共同完成一个完整的业务操作因此就会产生服务接口方法嵌套调用的情况 Spring通过事务传播行为控制当前的事务如何传播到被嵌套调用的目标服务接口方法中。 Spring在TransactionDefinition接口中规定了7种类型的事务传播行为它们规定了事务方法和事务方法发生嵌套调用时事务如何进行传播 (当使用PROPAGATION_NESTED时底层的数据源必须基于JDBC 3.0并且实现者需要支持保存点事务机制。) 事务传播行为类型 说明 PROPAGATION_REQUIRED 如果当前没有事务就新建一个事务如果已经存在一个事务中加入到这个事务中。这是最常见的选择。 PROPAGATION_SUPPORTS 支持当前事务如果当前没有事务就以非事务方式执行。 PROPAGATION_MANDATORY 使用当前的事务如果当前没有事务就抛出异常。 PROPAGATION_REQUIRES_NEW 新建事务如果当前存在事务把当前事务挂起。 PROPAGATION_NOT_SUPPORTED 以非事务方式执行操作如果当前存在事务就把当前事务挂起。 PROPAGATION_NEVER 以非事务方式执行如果当前存在事务则抛出异常。 PROPAGATION_NESTED 如果当前存在事务则在嵌套事务内执行。如果当前没有事务则执行与PROPAGATION_REQUIRED类似的操作。 此外还有超时时间、是否只读等相关功能。 7、TransactionStatus保存事务状态 接口提供了一些方法来判断获得事务当前的状态 void flush();冲洗数据库底层会话 boolean hasSavePoint();返回该事务是否有一个保存点 boolean isCompleted();返回事务是否提交或者回滚 boolean isNewTransaction();返回是否是一个新事务 boolean isRollbackOnly();判断这个事务是否已经设置了rollback-only。 void setRollbackOnly();设置这个事务rollback-only。 8、嵌套事务 嵌套是子事务套在父事务中执行子事务是父事务的一部分。 在进入子事务之前父事务建立一个回滚点叫save point然后执行子事务。这个子事务的执行也算是父事务的一部分然后子事务执行结束父事务继续执行。重点就在于那个save point看几个问题就明白了。 如果子事务回滚会发生什么 父事务会回滚到进入子事务前建立的save point然后尝试其他的事务或者其他的业务逻辑父事务之前的操作不会受到影响更不会自动回滚。 如果父事务回滚会发生什么 父事务回滚子事务也会跟着回滚为什么呢因为父事务结束之前子事务是不会提交的我们说子事务是父事务的一部分正是这个道理。 那么事务的提交是什么情况 是父事务先提交然后子事务提交还是子事务先提交父事务再提交 答案是第二种情况还是那句话子事务是父事务的一部分由父事务统一提交。 9、Spring支持两种方式事务管理 ——编程式的事务管理 实际开发中很少应用通过TransactionTemplate手动管理事 ——使用XML配置声明事务 开发中推荐使用代码侵入性最小Spring的声明式事务是通过AOP实现 10、声明式事务管理——XML配置AOP思想 step-01 配置事务管理器——注入dataSource确定对哪个数据库操作 step-02 配置事务的增强——要做的事务操作确定进行事务操作的方法匹配规则。隔离级别、哪个方法进行事务 step-03 配置切面——把通知应用到切点。 11、声明式事务管理——注解配置 step-01 配置事务管理器——注入dataSource确定对哪个数据库操作 step-02 开启事务注解 step-03 在要使用事务的方法所在类上面添加注解Transactional。 参考http://opiece.me/2016/03/18/spring-transactional-introduce/ 转载于:https://www.cnblogs.com/bigbigbigo/p/8383272.html