阿里的一个面试题:怎么保证spring事务内的链接惟一性

阿里二面的时候被问到的一个问题:面试

在spring的同一个事务内的多个方法,是怎么保证使用的是同一个数据库链接?原理是什么?涉及框架中的哪些类,具体做用是什么?举出几个例子。spring

阿里的一个面试题:怎么保证spring事务内的链接惟一性

 

最佳答案以下:数据库

事务,是描述一组操做的抽象,好比对数据库的一组操做,要么所有成功,要么所有失败。编程

事务具备4个特性:安全

§ Atomicity(原子性)多线程

§ Consistency(一致性)架构

§ Isolation(隔离性)框架

§ Durability(持久性)线程

事务是否生效取决数据库底层是否支持(好比MySQL的MyISAM引擎就不支持事务,Spring能奈何!),同时一个事务的多个操做须要在同一个Connection上。视频

事务也每每是在业务逻辑层来控制。

写一个获得数据库链接的管理类ConnectionManager

阿里的一个面试题:怎么保证spring事务内的链接惟一性

 

在Spring中,有时候咱们是否是要配置多个数据源DataSource?

很显然,Spring须要经过DataSource来获得操做数据库的管道Connection。

这里经过ConnectionManager类来完成这个过程,须要思考的是在多线程下,这显然是存在问题的。

为避免多线程问题,难道咱们采用线程安全的Map,好比ConcurrentHashMap,其实咱们真正的目的是什么?

是保证一个线程下,一个事务的多个操做拿到的是一个Connection,显然使用ConcurrentHashMap根本没法保证!

Spring很聪明,她提供了一种思路,来解决,看下面的代码!

阿里的一个面试题:怎么保证spring事务内的链接惟一性

原本线程不安全的,经过ThreadLocal这么封装一下,马上就变成了线程的局部变量,不单单安全了。

还保证了一个线程下面的操做拿到的Connection是同一个对象!

这种思想,确实很是巧妙,这也是无锁编程思想的一种方式!

最后写一个TransactionManager,这样咱们就能够管理事务了。

阿里的一个面试题:怎么保证spring事务内的链接惟一性

Java架构资料,获取方式

关注+转发后,私信回复关键词 【架构】便可获取以上价值1.8w的全套资料及视频

重要的话讲两遍,转发、转发后再发私信,才能够拿到哦!

相关文章
相关标签/搜索