首页 > 编程语言 > 详细

Spring 声明式事务

时间:2020-08-01 15:55:15      阅读:105      评论:0      收藏:0      [点我收藏+]

编程式事务:在业务代码中添加事务控制代码,这样的事务控制机制就叫做编程式事务

声明式事务:通过xml或者注解配置的?式达到事务控制的?的,叫做声明式事务

 

事务的概念

  事务指逻辑上的?组操作,组成这组操作的各个单元,要么全部成功,要么全部不成功。从?确保了数据的准确与安全

事务的四大特性

  • 原子性(Atomicity)  原?性是指事务是?个不可分割的?作单位,事务中的操作要么都发?,要么都不发?。从操作的?度来描述
  • ?致性(Consistency)  事务必须使数据库从?个?致性状态变换到另外?个?致性状态。?致性是从数据的?度来说的
  • 隔离性(Isolation)  事务的隔离性是多个?户并发访问数据库时,数据库为每?个?户开启的事务,每个事务不能被其他事务的操作数据所?扰,多个并发事务之间要相互隔离
  • 持久性(Durability)  持久性是指?个事务?旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发?故障也不应该对其有任何影响

 

事务的隔离级别

  不考虑隔离级别,会出现以下情况:(以下情况全是错误的),也即为隔离级别在解决事务并发问题
  • 脏读:?个线程中的事务读到了另外?个线程中未提交的数据。
  • 不可重复读:?个线程中的事务读到了另外?个线程中已经提交的update的数据(前后内容不?样)
  • 虚读(幻读):?个线程中的事务读到了另外?个线程中已经提交的insert或者delete的数据(前后条数不?样)
数据库定义了四种隔离级别:
  • Serializable(串?化):可避免脏读、不可重复读、虚读情况的发?。  (串?化) 最?
  • Repeatable read(可重复读):可避免脏读、不可重复读情况的发?,该机制下会对要update的?进?加锁。      (幻读有可能发?)  第?
  • Read committed(读已提交):可避免脏读情况发?。不可重复读和幻读?定会发?。    第三
  • Read uncommitted(读未提交):最低级别,以上情况均?法保证。   (读未提交) 最低
注意:级别依次升高,效率依次降低
MySQL的默认隔离界别是:REPEATABLE READ
查询当前使用的隔离级别:select @@tx_isolation;
设置MySQL事务的隔离级别:set session transaction isolation level xxx; (设置的是当前mysql连接的会话,并不是永久改变的)
 

事务的传播行为

  事务一般在service层进?控制,如果出现service层?法A调?了另外?个service层?法B,A和B?法本身都已经被添加了事务控制,那么A调?B的时候,就需要进?事务的?些协商,这就叫做事务的传播?为
 
下表为spring的事务传播行为:加粗为常用的
PROPAGATION_REQUIRED
如果当前没有事务,就新建?个事务,如果已经存在?个事务中,加?到这个事务中。这是最常?的选择
PROPAGATION_SUPPORTS
?持当前事务,如果当前没有事务,就以?事务?式执?
PROPAGATION_MANDATORY
使?当前的事务,如果当前没有事务,就抛出异常
PROPAGATION_REQUIRES_NEW
新建事务,如果当前存在事务,把当前事务挂起
PROPAGATION_NOT_SUPPORTED
以?事务?式执?操作,如果当前存在事务,就把当前事务挂起
PROPAGATION_NEVER
以?事务?式执?,如果当前存在事务,则抛出异常
PROPAGATION_NESTED
如果当前存在事务,则在嵌套事务内执?。如果当前没有事务,则执?与PROPAGATION_REQUIRED类似的操作

 

Spring 中事务的API

public interface PlatformTransactionManager {

    /**
     * 获取事务状态信息
     */
    TransactionStatus getTransaction(@Nullable TransactionDefinition definition)
            throws TransactionException;

    /**
     * 提交事务
     */
    void commit(TransactionStatus status) throws TransactionException;

    /**
     * 回滚事务
     */
    void rollback(TransactionStatus status) throws TransactionException;

}

作用:

  此接?是Spring的事务管理器核?接?。Spring本身并不?持事务实现,只是负责提供标准,应?底层?持什么样的事务,需要提供具体实现类。此处也是策略模式的具体应?。在Spring框架中,也为我们内置了?些具体策略,例如:DataSourceTransactionManager , HibernateTransactionManager 等
 
 
 

 

Spring 声明式事务

原文:https://www.cnblogs.com/scdzyc/p/13414737.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!