spring中的事务与数据库中的事务的理解

        数据库中的事务,当我们看到这篇文章的时候,心中都已明了。并对spring的事务有一定的理解。但是二者究竟是什么关系呢?还记得刚认识到这个问题时困惑了很久痕久,在此做出梳理,仅供参考。spring管理的事务是逻辑事务,

使用spring管理事务我们需要:

原理

      spring在启动的时候会去解析生成相关的bean,这时候就会去查看拥有相关注解的类和方法,并且为这些类或方法生成代理,

并根据@Transaction相关参数进行相关配置注入,如果需要修改事务的隔离级别和传播特性的属性,则使用该注解中的属性进行

指定。这里默认的隔离级别与各个数据库一致,比如MySQL是Repeatable Read,而传播特性默认则Propagation.REQUIRED,

即只需要当前操作具有事务即可。这样就在代理中为我们把相关的事务处理掉了(开启正常提交事务,异常回滚事务)。

达到的效果是:

 1,对指定的类的方法添加事务,

 2,配置管理,不需要每个对数据库的操作都像jdbc操作数据库一样写那么多代码,

 3,spring的配置式事务可以吧多个操作数据库的方法配置在一个事务中,这样灵活性更加高了。

扩展:数据库底层的事务的提交与回滚是通过binlog或者redolog去实现的。

Spring事务的本质其实就是数据库对事务的支持,没有数据库的事务支持,spring是无法提供事务功能的。

总的来说,本质上其实是同一个概念,(以下内容参考百度知道)

spring的事务是对数据库的事务的封装,最后本质的实现还是在数据库,假如数据库不支持事务的话,spring的事务是没有作用的.

数据库的事务说简单就只有开启,回滚和关闭,spring对数据库事务的包装,原理就是拿一个数据连接,根据spring的事务配置,

操作这个数据连接对数据库进行事务开启,回滚或关闭操作.但是spring除了实现这些,还配合spring的传播行为对事务进行了更广

的管理.其实这里还有个重要的点,那就是事务中涉及的隔离级别,以及spring如何对数据库的隔离级别进行封装.事务与隔离级别

在一起理解会更好些。

学无止境,随着岁月的沉淀对知识的理解会有不同的领悟。

如有不足,欢迎留言指正,望不吝赐教。。。

发布了171 篇原创文章 · 获赞 1 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/duan196_118/article/details/104814284