美文网首页
spring事务threadlocal

spring事务threadlocal

作者: hehehehe | 来源:发表于2020-11-24 18:34 被阅读0次

    事务是否生效取决数据库底层是否支持(比如MySQL的MyISAM引擎就不支持事务,Spring能奈何!),同时一个事务的多个操作需要在同一个Connection上。事务也往往是在业务逻辑层来控制。

    image.png 在Spring中,有时候我们是不是要配置多个数据源DataSource?很显然,Spring需要通过DataSource来得到操作数据库的管道Connection,这有点类似于JNDI查找。
    这里通过ConnectionHolder类来完成这个过程,需要思考的是在多线程下,这显然是存在问题的。为避免多线程问题,难道我们采用线程安全的Map,比如ConcurrentHashMap,其实我们真正的目的是什么?是保证一个线程下,一个事务的多个操作拿到的是一个Connection,显然使用ConcurrentHashMap根本无法保证!
    Spring很聪明,她提供了一种思路,来解决,看下面的代码!
    image.png 本来线程不安全的,通过ThreadLocal这么封装一下,立刻就变成了线程的局部变量,不仅仅安全了,还保证了一个线程下面的操作拿到的Connection是同一个对象!这种思想,确实非常巧妙,这也是无锁编程思想的一种方式! image.png image.png image.png image.png image.png image.png

    一个线程中的一个事务的多个操作,使用的是同一个Connection

    相关文章

      网友评论

          本文标题:spring事务threadlocal

          本文链接:https://www.haomeiwen.com/subject/tqkwiktx.html