Spring事务处理-ThreadLocal的使用

经历了几天的研究,终于是明白了ThreadLocal在Spring事务管理过程中发挥的用途。下面就以图文的形式和大家分享,如有错误,欢迎指正。大家都知道,Spring允许以声明的方式进行事务管理。通过声明的方式,程序员可以仅仅专注于业务代码,事务管理由Spring框架代为进行。以JDBC为例,正常的事务代码可能如下:dbc = new DataBaseConnection();//第1行...
摘要由CSDN通过智能技术生成

经历了几天的研究,终于是明白了ThreadLocal在Spring事务管理过程中发挥的用途。下面就以图文的形式和大家分享,如有错误,欢迎指正。

大家都知道,Spring允许以声明的方式进行事务管理。通过声明的方式,程序员可以仅仅专注于业务代码,事务管理由Spring框架代为进行。

以JDBC为例,正常的事务代码可能如下:

dbc = new DataBaseConnection();//第1行
Connection con = dbc.getConnection();//第2行
con.setAutoCommit(false);// //第3行
con.executeUpdate(...);//第4行
con.executeUpdate(...);//第5行
con.executeUpdate(...);//第6行
con.commit();第7行


上述代码,可以分成三个部分:


事务准备阶段:第1~3行
业务处理阶段:第4~6行
事务提交阶段:第7行



在Spring框架中,程序员专注于设计业务处理阶段,事务准备阶段和事务提交阶段由Spring来完成。在实际开发过程中,我们仅仅编写了业务处理阶段,事务准备阶段和事务提交阶段会由Spring框架根据我们的事务相关配置文件动态生成--利用AOP。关于AOP,这里就不说了,网上有很多资料。

但是大家需要注意一个问题,在利用AOP动态生成的代码中,如何才能让三个阶段使用同一个数据源连接呢?这是很重要的。如果三个阶段使用不同的数据源连接,自然是错误的。

现在需要办到的是 让软件结构中纵向的三个阶段 使用同样的一个参数,而这三个阶段之间不可以进行参数传递。解决方案是---线程绑定。

Web容器中,每个完整的请求周期会由一个线程来处理。因此,如果我们能将一些参数绑定到线程的话,就可以实现在软件架构中跨层次的参数共享(是隐式的共享)。这是一件很牛逼的事情,在框架中被经常使用。而JAVA中恰好提供了绑定的方法--使用ThreadLocal。

ThreadLocal是一种线程本地变量,使用ThreadLocal的形式声明一个变量,该变量就会在每个线程中创建一个变量的副本。

 

 

 

public class Demo {
	public static ThreadLocal<String> threadLocalString = new ThreadLocal<String>(){
		protected Strin
  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值