Spring事务的传播特性:
1、PROPAGATION_REQUIRED: 如果存在一个事务,则支持当前事务。如果没有事务则开启
2、PROPAGATION_SUPPORTS: 如果存在一个事务,支持当前事务。如果没有事务,则非事务的执行
3、PROPAGATION_MANDATORY: 如果已经存在一个事务,支持当前事务。如果没有一个活动的事务,则抛出异常。
4、PROPAGATION_REQUIRES_NEW: 总是开启一个新的事务。如果一个事务已经存在,则将这个存在的事务挂起。
5、PROPAGATION_NOT_SUPPORTED: 总是非事务地执行,并挂起任何存在的事务。
6、PROPAGATION_NEVER: 总是非事务地执行,如果存在一个活动事务,则抛出异常
7、PROPAGATION_NESTED:如果一个活动的事务存在,则运行在一个嵌套的事务中. 如果没有活动事务, 则按TransactionDefinition.PROPAGATION_REQUIRED 属性执行

Spring事务的隔离级别:
1、ISOLATION_DEFAULT: 这是一个PlatfromTransactionManager默认的隔离级别,使用数据库默认的事务隔离级别.
另外四个与JDBC的隔离级别相对应
2、ISOLATION_READ_UNCOMMITTED: 这是事务最低的隔离级别,它充许令外一个事务可以看到这个事务未提交的数据。
这种隔离级别会产生脏读,不可重复读和幻像读。
3、ISOLATION_READ_COMMITTED: 保证一个事务修改的数据提交后才能被另外一个事务读取。另外一个事务不能读取该事务未提交的数据
4、ISOLATION_REPEATABLE_READ: 这种事务隔离级别可以防止脏读,不可重复读。但是可能出现幻像读。
它除了保证一个事务不能读取另一个事务未提交的数据外,还保证了避免下面的情况产生(不可重复读)。
5、ISOLATION_SERIALIZABLE 这是花费最高代价但是最可靠的事务隔离级别。事务被处理为顺序执行。除了防止脏读,不可重复读外,还避免了幻像读。

数据库操作面临的问题: 脏读:指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。因为这个数据是还没有提交的数据, 那么另外一 个事务读到的这个数据是脏数据,依据脏数据所做的操作可能是不正确的。不可重复读:指在一个事务内,多次读同一数据。在这个事务还没有结束时,另外一个事务也访问该同一数据。 那么,在第一个事务中的两
1.在外围方法未开启 事务 的情况下Propagation.REQUIRED修饰的内部方法会新开启自己的 事务 ,且开启的 事务 相互独立,互不干扰。 2.在外围方法开启 事务 的情况下Propagation.REQUIRED修饰的内部方法会加入到外围方法的 事务 中,所有Propagation.REQUIRED修饰的内部方法和外围方法均属于同一 事务 ,只要一个方法回滚,整个 事务 均回滚.抛出异常或者异常捕获到都回滚 3.在外围方法未开启 事务 的情况下Propagation.REQUIRES_NEW修饰的内部方法会新开启自己的 事务
事务 传播 行为什么叫 事务 传播 行为?听起来挺高端的,其实很简单。 即然是 传播 ,那么至少有两个东西,才可以发生 传播 。单体不存在 传播 这个行为。 事务 传播 行为(propagation behavior)指的就是当一个 事务 方法被另一个 事务 方法调用时,这个 事务 方法应该如何进行。 例如:methodA 事务 方法调用methodB 事务 方法时,methodB是继续在调用者methodA的 事务 中运行呢,还是为自己开启一个
A,B两个方法都有 事务 ,在A方法中去调用B方法,此时 事务 方法应该如何进行处理。 比如 A方法里面调用B方法。 情况一:A方法出现异常,A方法需要回滚,那么B方法需不需要回滚呢? 情况二:B方法出现异常,B方法需要回滚,那么A方法需不需要回滚呢? spring 总共给出了7种 事务 隔离级别 : 1、PROPAGATION_REQUIRED:默认 事务 类型,如果没有,就新建一个 事务 ;如果有,就加入当前 事务 。适合绝大多数情况。 解释:方法A中调用方法B,B方法的 事务 传播 设置为PROPAGATION
一、 传播 特性 的产生        在项目开发中,一般将 事务 设置在service层,当调用这个service方法时,这个service保证了所有的操作在同一个 事务 中,所有对数据库的操作要么一起成功,要么一起失败。        如果service方法除了调用DAO,还调用了其他的service方法,如何通过 事务 控制,保证数据的一致,这个时候就需要 事务 传播 特性 。 二、 传播 特性 种类
事务 传播 特性 汇总: required:使用当前的 事务 ,如果当前没有 事务 ,则创建一个 事务 ,子方法是必须运行在一个 事务 中的,如果当前存在 事务 ,则加入这个 事务 ,成为一个整体。 supports:如果当前有 事务 ,则使用 事务 ,如果当前没有 事务 ,则不使用 事务 mandatory:该 传播 强制必须存在一个 事务 ,如果不存在,则抛出异常 required_new:如果当前有 事务 ,则挂起该 事务 ,并且自己创建一个新的 事务 给自己使用;如果当前没有 事务 ,则同required not_support:如果当前有 事务 ,..
Spring 事务 是指对数据库操作进行的一系列ACID(原子 、一致 、隔离 、持久 )操作的控制,确保 事务 的正确 和完整 Spring 支持 编程 事务 和声明式 事务 两种方式。 在 Spring 中, 事务 传播 机制是指在一个 事务 方法中调用另一个 事务 方法时,如何处理这两个 事务 之间的关系。 Spring 中定义了7种 事务 传播 行为,分别是: 1. PROPAGATION_REQUIRED:如果当前存在 事务 ,则加入该 事务 ;否则新建一个 事务 ,并在该 事务 中执行。 2. PROPAGATION_SUPPORTS:如果当前存在 事务 ,则加入该 事务 ;否则以非 事务 方式执行。 3. PROPAGATION_MANDATORY:如果当前存在 事务 ,则加入该 事务 ;否则抛出异常。 4. PROPAGATION_REQUIRES_NEW:新建一个 事务 ,并在该 事务 中执行;如果当前存在 事务 ,则挂起当前 事务 。 5. PROPAGATION_NOT_SUPPORTED:以非 事务 方式执行;如果当前存在 事务 ,则挂起当前 事务 。 6. PROPAGATION_NEVER:以非 事务 方式执行;如果当前存在 事务 ,则抛出异常。 7. PROPAGATION_NESTED:如果当前存在 事务 ,则在嵌套 事务 中执行;否则新建一个 事务 ,并在该 事务 中执行。 在使用 Spring 事务 时,我们需要根据具体情况选择合适的 事务 传播 行为,以确保 事务 的正确 和完整