事务处理中如何获取同一个connection 对象
运用线程内部的map属性,将对象绑定到ThreadLocal中:
具体实现:
1.新建一个绑定Connection对象的单例类
public class ConnectionBind {
    private ConnectionBind(){}
    private static ConnectionBind instance=new ConnectionBind();
    public static ConnectionBind getInstance() {
        return instance;
    }
    private ThreadLocal<Connection> threadLocal=new ThreadLocal<>();
    //线程绑定
    public void bind(Connection connection){
        threadLocal.set(connection);
    }
    //获取绑定的线程对象
    public Connection get(){
        return threadLocal.get();
    }
    //解出绑定
    public void remove(){
        threadLocal.remove();
    }
}
2.新建一个ThreadLocationFilter过滤器,对所有的请求过滤,在doFilter方法中做如下实现:
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        Connection connection=null;
        try {
            //1.获取连接
            connection =JdbcUtils.getConnection();
            //2.开启事务
            connection.setAutoCommit(false);
            //3.利用ThreadLocal把当前连接和当前线程绑定
            ConnectionBind.getInstance().bind(connection);
            //4.把请求转给目标Servlet
            chain.doFilter(request, response);
            //5.提交事务
            connection.commit();
        } catch (Exception e) {
            //6.回滚事务
            try {
                connection.rollback();
            } catch (SQLException e1) {
                e1.printStackTrace();
            } 
       //重定向到错误页面
            HttpServletRequest request2=(HttpServletRequest) request;
            HttpServletResponse response2=(HttpServletResponse) response;
            response2.sendRedirect(request2.getContextPath()+"/error-1.jsp");
        }finally{
            //7.解出绑定
            ConnectionBind.getInstance().remove();
            //8.关闭数据库连接
            JdbcUtils.releaseConnection(connection);
        }
    }
3.获取同一个Connection连接对象
Connection connection=null;
connection=ConnectionBind.getInstance().get();
事务处理中如何获取同一个connection 对象的更多相关文章
- Spring是如何保证同一事务获取同一个Connection的?使用Spring的事务同步机制解决:数据库刚插入的记录却查询不到的问题(转)
		
前言 关于Spring的事务,它是Spring Framework中极其重要的一块.前面用了大量的篇幅从应用层面.原理层面进行了比较全方位的一个讲解.但是因为它过于重要,所以本文继续做补充内容:Spr ...
 - Connection 对象简介 方法解读  JDBC简介(四)
		
通过驱动管理器DriverManager的getConnection方法,可以创建到指定URL的连接 Connection conn = DriverManager.getConnection ...
 - jdbc 获取connection 对象的三种方式
		
获取数据库连接方法一:驱动实现类 //创建mysql的Driver对象 Driver driver=new com.mysql.jdbc.Driver(); //jdbc url 定位一个数据库: S ...
 - window.event.srcElement与window.event.target 触发事件的元素 触发事件对象的获取,window.event与时间函数参数的event是同一个 事件对象
		
判断事件触发的元素: var tag = window.event.target || window.event.srcElement; if (tag.tagName.toLowerC ...
 - JDBCToolsV2:利用ThreadLocal保证当前线程操作同一个数据库连接对象。
		
JDBCToolsV2: 利用ThreadLocal保证当前线程操作同一个数据库连接对象. package com.dgd.test; import com.alibaba.druid.poo ...
 - java 27 - 2 反射之 反射的概述以及获取Class文件对象的方式
		
反射: JAVA语言的反射机制: JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法: 对于任意一个对象,都能够调用它的任意一个方法和属性: 这种动态获取的信息以及动态调 ...
 - JDBC获取数据库Connection的工具抽取
		
使用JDBC获取数据库的连接,大字分为三个步骤 1.获取驱动包名,定义URL,database_username,database_password 2.获取Connection对象 3.利用Conn ...
 - ADO.NET系列之Connection对象
		
ADO.NET系列之Connection对象 ADO.NET系列之Command对象 ADO.NET系列之DataAdapter对象 ADO.NET系列之事务和调用存储过程 ADO.NET概念 ADO ...
 - Struts2_day03--课程安排_OGNL概述入门_什么是值栈_获取值栈对象_值栈内部结构
		
Struts2_day03 上节内容 今天内容 OGNL概述 OGNL入门案例 什么是值栈 获取值栈对象 值栈内部结构 向值栈放数据 向值栈放对象 向值栈放list集合 从值栈获取数据 获取字符串 获 ...
 
随机推荐
- python---用户登录程序
			
需求: 1. 用户登录,判断用户名密码是否正确 2. 密码输入三次不对则锁定账号 3. 锁定账号无法登录 分析: 1. 输入账号,判断账号是否存在,即账号是否在账号文件中存在: 2. 如果账号存在,则 ...
 - MFC学习问题总结
			
1.学习MFC添加位图,无法获取其ID 1).点击视图->其他窗口->资源视图,你会发现“无法在此窗口显示”,找到resource.h文件,关闭即可重新走一遍上面的过程就会发现可以打开了. ...
 - jdbc连接阿里云服务器上的MySQL数据库 及  数据库IP限制
			
问题1:Jdbc 如何连接阿里云服务器上的MySQL数据库? 解决: 上截图: 其中IP是阿里云服务器的公网IP地址. 问题2: 刚开始接手开发的时候,使用Navicat连接阿里云服务器上的数据后 ...
 - Yii2数据接口
			
写接口之前先确认那你已经安装了Yii2的basic版或者advanced版,如果还没有,赶快去看这篇文章:composer安装Yii2. 现在默认你已经安装了basic版或者advanced版了,并且 ...
 - 大型三甲医院管理系统源码PACS超声科室源码DICOM影像工作站
			
详情点击查看 开发环境 :VS2008 + C# + SQL2000 功能简介 1.患者登记工作站 集中登记患者基本信息和检查信息,包括就诊方式.患者来源.检查类型.检查部位.申请科室.申请医生等.可 ...
 - ns3构建2 core fat tree出错
			
我用ns3构建fat tree以下是我的拓扑结构: 在我用ns3构建完这个拓扑结构,并且加上此行代码: 但是运行的时候报错了.报的错误是: 解决办法是:进入到/src/internet/model/g ...
 - Page_Load不要忘了if (!IsPostBack)
			
Page_Load不要忘了if (!IsPostBack) 问题:在DropDownList的SelectedIndexChanged事件中绑定数据,运行时,DropDownList控件的Select ...
 - 简述spring的工作原理
			
建议不要硬着头皮看spring代码,本身的代码800多m,就是不上班开始看也不知道什么时候看完.如果想学学ioc,控制反转这些建议看看jodd项目,比较简练,但是我仍然不建议过多的看这些框架的代码,因 ...
 - resteasy上传文件写法
			
resteasy服务器代码 @Path(value = "file") public class UploadFileService { private final String ...
 - sql server 分区(上)
			
分区发展历程 基于表的分区功能为简化分区表的创建和维护过程提供了灵活性和更好的性能.追溯到逻辑分区表和手动分区表的功能. 二.为什么要进行分区 为了改善大型表以及具有各种访问模式的表的可伸缩 ...