Spring中基于AOP的事务管理

1.在项目启动类上添加@EnableTransactionManagement注解,(新版本springboot不用添加)
2.在合适的类上或者方法上添加@Transactional注解


@Transcationl

当在一个业务的方法中设置一个异常时,虽然抛出了异常,但是数据还是变化了!!
image.png
当状态从0禁止变为1(启用)时我在上面设置了抛出一个异常
image.png
刷新页面后,发现数据已经发生了变化!!
image.png
当我在用户业务层添加 @Transactionl后
image.png
数据发生了回滚,禁止并没有变成启动!说明transcationl生效了
image.png


readyOnly

        readyOnly只读:指定事务是否是只读事务

image.png
当在用户的业务层上注解@Transactional(readOnly = true)
如果再对用户进行增删改等操作时,就会报错image.png

       
    当readOnly只读默认是false,在进行查询的时候使用true可以增加效率,但是对于增删改等要使用true

image.png


rollbackFor

        rollbackFor:在出现指定异常时回滚(默认RuntimeException,Error都会滚)
        

image.png
在改变状态的业务方法上添加rollbackFor属性,值为自定义异常;
image.png
在valid==1时,抛出此异常;检测数据是否回滚
image.png
可以看到抛出异常,并且禁用状态并没有改变,数据回滚了

noRollbackFor

        noRollbackFor:出现指定异常,不发生回滚
        

把之前的rollbackFor改为noRollbackFor
image.png
改变状态,改变之前是禁用
image.png
抛出异常后刷新页面,状态已经变成启用了。说明虽然使用@Transactional注解,抛出了异常,但是数据并没有回滚
image.png

timeout

    超出设定时间业务没有完成就回滚
    

isolation 事务隔离级别

    如果多个事务并行执行,就会出现脏读、幻读、重复读等现象,如果不希望出现这种现象,就可以设置此属性,一般设置值为 : Isolation.READ_COMMITTED

propagation 事务的传播特性

    **不同业务对象(service)**中事务方法之间相互调用时,业务的传播方式。
    默认是:Propagation.REQUIRES_NEW  。指多个事务之间是同一个事务对象,其中一个事务回滚,之前的事务都会回滚
    如果想让其中一个事务回滚时,其他事务不回滚;就使用   Propagation.REQUIRES_NEW
    

流浪成疯
7 声望3 粉丝

学习


引用和评论

0 条评论