首页 > 编程知识 正文

springmvc注解有哪些,默认事务隔离级别

时间:2023-05-03 16:58:00 阅读:26588 作者:4502

2.Spring事务是指2.Spring事务的特性——ACID原子性:事务作为最小的执行单元,不允许分割,是全部成功还是全部失败

一致性:在事务执行前后,数据保持一致性;

隔离性:同时访问数据库时,每个并发事务之间是独立的,互不干扰

持久性:事务提交后,对他的数据库的更改是永久的。

场景: jkdhc高跟1.jkdhc账户转账100,jkdhc高跟100。 两者共有200

2.jkdhc会在机灵的高跟鞋上旋转50圈。 此事包括2个动作

jkdhc账户-50; 机灵的高跟鞋账户里有50;

2个动作同时成功才能被视为转账成功,否则全部失败; 并不是只有那一步能成功; (原子性)3.操作结束、

成功的话,jkdhc是50,漂亮的高跟鞋是150; 失败为(jkdhc为) 100,机灵的高跟鞋为100;

这种数据的变化必须是永久的(持久性),而且两者的总额必须是200)。 3.Spring事务隔离级别事务定义信息接口事务隔离定义了五个事务隔离级别。

1 .默认级别:使用后端数据库隔离级别2 .未读3 .可重读4 .可重读:可重读并不完全解决幻读,只在阅读select快照时解决。 当前读取delete、update和inserte时http://www.Sina.com/http://www.Sina.com/: next-keylocks来自3358www.Sina.com/

4 .事务声明评论@Transactional

5.Spring的事务传播行为

事务传播行为:用于说明某个一致性如何嵌套在MVCC中进行传播?

如下所示。 事务中限定的methodB是methodA public void methodA () { methodB ) }; } @ transaction (传播=XXX ) public void methodB ) )1.事务的七种传播行为

代码验证以下代码表现为传统三层结构中的服务层、Dao层两层,Spring负责管理next-key locksrecord locks,Dao层为my batibation

1 .先制作两张表

2 .然后创建相应的Bean和Dao层代码为1.User1的Bean

2 .用户1的DAO层

3 .用户1的DAO层

4 .用户2的豆豆

最后,具体验证的代码由服务层实现。 以下按情况列举。 1.Propagation.REQUIRED

已将Propagation.REQUIRED属性添加到与User1Service和User2Service对应的方法中。

1.1 .场景1——此场景的外围方法没有打开事务

1.2 .场景2外围方法gap locks事务,这是事务传播行为修饰的方法的场景。 —— 另一个方法时

2.Propagation.NESTED

已将Propagation.NESTED属性添加到与User1Service和User2Service对应的方法中。

2.1场景此场景的外围方法依赖注入事务。

2.2 .开始场景——外围方法事务。

3.Propagation.REQUIRES_NEW

将Propagation.REQUIRES_NEW属性添加到User1Service和User2Service的相应方法中。

3.1 .场景1——外围方法未打开事务

3.2 .打开场景2——外围方法事务

3.x .比较上述三种类型的REQUIRED、REQUIRES_NEW、NESTED 4.1. REQUIRED和NESTED 1.时,会受到外围回滚的影响。 他们俩修饰的内部方法注解式事务,周边方法抛出异常。 这两种方法可以被catch吗:

REQUIRED是加入外围方法的事务,内外一体,一旦内部方法的事务抛出异常,无论会不会被内部方法自己catch,外围方法的事务一样会回滚。NESTED修饰的是外围方法的嵌套子事务,有单独的保存点,所以他抛出异常被catch掉不会影响外围方法的事务。 4.2. Nested与Requires_News 1.都可以被catch,那会不会被外围方法影响?:他俩 都可以做到内部方法事务回滚不影响外围方法的事务。 但是因为nested是嵌套子事务,所以外围方法回滚,他作为外围事务的子事务也会被回滚。Requires_New是通过开启新事务实现的,内外事务是两个事务,外围回滚不影响内部事务。 4.3.Nested与Requires_News、REQUIRED

REQUIRED,无论内部事务catch与否,内外一定会互相影响
Nested: 可以通过catch做到 内可以不影响外,但是外一定会影响内
Requires_News:内可以通过catch不影响外外一定影响不了内

4.PROPAGATION_MANDATORY 1.如果已经存在1个事务,支持当前事务;2.如果没有1个活动事务,则抛出异常。 代码分析: 1.单独调用方法methodB时,因为当前没有一个活动的事务,则会抛出异常;2.当调用方法methodA时,methodB则加入到methodA的事务中,事务的执行。 @Transactional(propagation = Propagation.REQUIRED)public void methodA() { methodB();// do something} 事务属性为MANDATORY@Transactional(propagation = Propagation.MANDATORY)public void methodB() { do something();} 5.PROPAGATION_SUPPORTS 1.如果存在一个事务,支持当前事务;2.如果没有事务,则非事务的执行。 代码分析 1.单独的调用methodB时,它会非事务的执行;2.调用methodA时,methodB则加入methodA的事务中,事务地执行; @Transactional(propagation = Propagation.REQUIRED)public void methodA() { methodB();// do something} 事务属性为SUPPORTS@Transactional(propagation = Propagation.SUPPORTS)public void methodB() { do something();} 6.PROPAGATION_NOT_SUPPORTED 1.他总是非事务的执行,并挂起任何存在的事务;
他也需要使用JtaTransactionManager作为事务管理器。 代码分析: 1.单独调用methodB时,无事务的执行;2.调用methodA时,执行到methodB时会挂起事务A,以非事务的方式执行methodB;
7.PROPAGATION_NEVER

总是非事务的执行,如果存在1个活动事务,则会抛出异常

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。