事务处理中如何获取同一个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集合 从值栈获取数据 获取字符串 获 ...
随机推荐
- Resin4下JSP文件导出问题的解决
之前我在Resin3下采用JSP代码对一些硬盘上的文件作读取以后再输出或者生成一些特殊格式文件(如Excel)再输出供下载,这些文件输出JSP代码在Resin4以后输出的文件都产生错误无 ...
- 小试cordova
Cordova就是以前的PhoneGap捐献给Apache的最新开源版本. 安装一定要走npm网络方式,需要装Node.js,npm(windows nodejs安装包包含npm),Git.因为必须要 ...
- ubuntu10.04 安装oracle server 版 笔记
1:从oracle 官网下载oracle 10g ,然后解压出一个database文件夹. 2 :创建RedHat的版本声明文件[默认ubuntu无法通过oracle 的检查] 在/etc/redha ...
- linux 系统centOS 7 怎么在线安装mysql
以下操作,注意空格,为避免出错,可以选择直接copy 第一步: 输入命令行 yum list installed | grep mysql 检查是否已经安装mysql 已安装输入 ...
- Sublime text 3 注册码激活码 版本号3143
—– BEGIN LICENSE —– TwitterInc 200 User License EA7E-890007 1D77F72E 390CDD93 4DCBA022 FAF60790 61AA ...
- 接口和抽象类的区别(JDK1.8)
1.一个类只能进行单继承,但可以实现多个接口. 2.有抽象方法的类一定是抽象类,但是抽象类里面不一定有抽象方法: 接口里面所有的方法的默认修饰符为public abstract,接口里的成员变量默认的 ...
- visual studio中如何将string类型值转为BYTE(unsigned char)类型
昨天困惑一件事,就是手里有个string类型的字符串,像01 23 45 67 89 AB CD EF,根据空格拆分为一个个的子字符串后(如EF),需要放到一个BYTE(typedef unsigne ...
- Selenium调用webdriver.chrome()出错
问题描述: 今天因为在学习要使用selenium这个python库,我下载好了selenium,并且也Import成功了,但是在我使用webdirver.chorme()时,却提示PATH路径中没有c ...
- longestCommonPrefix
Description: Write a function to find the longest common prefix string amongst an array of strings. ...
- Python杂记
一.函数 1.numpy 模块中的nonzero函数 nonzero返回的数非零元素的下标. 如果输入是单维度的时候它的返回值只有一个:如果输入是多个维度的话,那么它的返回值也是多个维度的.并且的它的 ...