转账业务

步骤

最后的步骤应该为:
try{
1. 开启事务
2. 执行操作
3. 提交事务
}catch(Exception e){
4. 回滚事务
}finally{
5. 释放连接
}

事务控制.

一次转账应该由同一个connection来控制,而不是4个单独的连接. 需要使用ThreadLocal对象吧Connection和当前线程绑定,从而使一个线程中只有一个控制事务的对象.

首先写一个连接的工具类.
1. 新建一个private ThreadLocal< Connection >.
2. 编写getThreadCollection方法从ThreadLocal 中获取连接. conn==null时,从数据源中获取连接.否则直接return conn.
3. 获取了连接后就要编写事务管理的工具类.
4. 还需要一个与连接解绑的方法removeConnection();. 当连接还回连接池后,线程要与连接解绑. 方法就一句话 tl.remove();

事务管理的工具类.
所需的连接 通过Spring的Set方法注入ConnentionUtils. 即可利用getThreadConnection获取连接.

  1. 开启事务 connectionUtils.getThreadConnection().setAutoCommit(false);
  2. 提交事务 connectionUtils.getThreadConnection().commit();
  3. 回滚事务 connectionUtils.getThreadConnection().rollback();
  4. 释放连接 连接池,只是还回了连接池中. 除了close() 还回连接 还要调用线程连接解绑ConnectionUtils.removeConnection();

现在,Dao里面使用的Runner不再需要用给QueryRunner注入数据源.现在连接从工具类中获得,QueryRunner的参数可以自己提供连接.将数据源注入给连接工具类.

很明显 每个业务都需要上述5个步骤,需要一种方法将重复的地方省略,回归最简单的直接调用操作就好. 这就需要动态代理 , 也就是Spring的AOP

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值