SpringBoot的事务中一种奇怪问题以及处理方法

Transaction注解在Spring中是事务,事务呢,简单来说,就是放在一起的一组SQL操作。


那么事务和普通的SQL有什么不太一样的地方呢?

  • 原子性 (要么全做,要么不做)
  • 一致性 (事务中的数据要一致,在有些时候是会出现不一致的情况的)
  • 持久性 (这些修改最终是会存到数据库的)
  • 隔离性 (这一点主要是针对多线程环境)

什么时候需要事务

如果我们一次会进行很多个SQL操作,那么这个时候应该使用事务机制进行控制,尤其是对数据库进行写入的时候,就需要使用事务,一旦操作失败,我们就可以使用这种机制进行挽回。

如果这一组SQL正确无误的完成了,那么就需要通过提交把数据存储进数据库,如果操作失败,相应的可以通过回滚来返回操作之前的状态

SpringBoot的事务

只需要在进行这种操作的位置添加Transcation注解就可以了。

这个注解就是为处理事务而准备的,他在Spring中通过AOP的方式实现,值得注意的是,事务如果成功完成,那么他将会在AOP中AfterReturning的时刻进行提交,我们如果希望在更新数据库后马上通知UI刷新,那么最好也在AfterReturning中进行处理,否则就会出现一个很奇怪的现象,既,成功添加了数据,但是刷新却看不到添加的效果,这就是由于此时的事务尚未提交导致的。

因此我们在用AOP拦截需要刷新界面的操作,使用AfterReturning在Transcation执行之后进行更新,在这个aspect中,需要添加order注解使得它在事务的AfterReturning之后执行,这样就可以避免这种问题了。

猜你喜欢

转载自blog.csdn.net/YunJian01/article/details/82414150
今日推荐