1、适用场景

一个service,操作两个dao,要求两个dao为同一个事务,要么全成功,要么全失败。

aaarticlea/png;base64,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" alt="" />

DBUtils,使用ThreadLocal

 public class DbUtils {
//线程局部数据容器
private static ThreadLocal<Connection> tl = new ThreadLocal<Connection>();
private static DataSource ds;
private static Connection conn;
static{
ds=new ComboPooledDataSource();
} public static DataSource getdDataSource()
{
return ds;
}
public static Connection getcConnection()
{ try {
conn=tl.get();//是否已经有值
if(conn==null)//没有值就添加
{
conn=ds.getConnection();
tl.set(conn);
} } catch (SQLException e) {
e.printStackTrace();
}
return conn;
} public static void remove()
{
tl.remove();//实现一个删除thredlocal中与线程相关的对象
}
}

过滤器中管理事务

 public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
Connection conn = null;
try {
conn = DbUtils.getcConnection();
conn.setAutoCommit(false);
chain.doFilter(request, response);//放行
conn.commit();//如果没有出错,提交事务,所以需要在dao中抛出异常,不能try-catch,否则无法捕捉到错误
System.err.println("成功.......................");
} catch (Exception e) {
System.err.println("出错了......................");
try {
//判断是否是数据库错误,如果不是还是提交
if (e instanceof SQLException) {
conn.rollback();
} else {
conn.commit();
}
} catch (SQLException e1) {
e1.printStackTrace();
}
} finally {
try {
conn.close();//关闭连接
DbUtils.remove();//实现一个删除thredlocal中与线程相关的对象
} catch (SQLException e) {
e.printStackTrace();
}
}
}

注意:必须在dao中抛出异常,否则无法捕捉到,永远是提交事务。

dao层:

try {
DataSource ds=DbUtils.getdDataSource();
Connection conn=ds.getConnection();
QueryRunner run =new QueryRunner(ds);
String sql="INSERT INTO users VALUES (?,?,? ";
run.update(conn, sql,"U005","Tom","456");
} catch (SQLException e) {
throw new RuntimeException(e);
}

如果需要进行事务的管理,添加到过滤器url中即可

用ThreadLocal管理事务的更多相关文章

  1. 利用ThreadLocal管理事务

    package com.itheima.util; import java.sql.Connection; import java.sql.SQLException; //封装了所有与事务有关的方法 ...

  2. 基于JDK动态代理和CGLIB动态代理的实现Spring注解管理事务(@Trasactional)到底有什么区别。

    基于JDK动态代理和CGLIB动态代理的实现Spring注解管理事务(@Trasactional)到底有什么区别. 我还是喜欢基于Schema风格的Spring事务管理,但也有很多人在用基于@Tras ...

  3. Spring中的事物管理,用 @Transactional 注解声明式地管理事务

    事物: 事务管理是企业级应用程序开发中必不可少的技术,  用来确保数据的 完整性和 一致性. 事务就是一系列的动作, 它们被当做一个单独的工作单元. 这些动作要么全部完成, 要么全部不起作用 事务的四 ...

  4. java笔记--用ThreadLocal管理线程,Callable<V>接口实现有返回值的线程

    用ThreadLocal管理线程,Callable<V>接口实现有返回值的线程 ThreadLocal在我的笔记"关于线程同步"的第5种方式里面有介绍,这里就不多说了. ...

  5. 通过案例掌握Spring 管理事务的步骤及配置

    案例描述  通过完成生成订单业务,掌握事务处理.  需要d_order表和d_item表  订单生成时的业务逻辑:向d_order插入1条数据的同时,向t_item中插入若干条数据  这就是一个独立的 ...

  6. spring是如何管理 事务的

    Spring提供的事务管理可以分为两类:编程式的和声明式的.编程式的,比较灵活,但是代码量大,存在重复的代码比较多:声明式的比编程式的更灵活方便.  1.传统使用JDBC的事务管理  以往使用JDBC ...

  7. Spring -- <tx:annotation-driven>注解基于JDK动态代理和CGLIB动态代理的实现Spring注解管理事务(@Trasactional)的区别。

    借鉴:http://jinnianshilongnian.iteye.com/blog/1508018 基于JDK动态代理和CGLIB动态代理的实现Spring注解管理事务(@Trasactional ...

  8. ThreadLocal管理Connection

    ThreadLocal管理Connection 每一个用户都对应有一个单独线程,每一个线程都有一个数据库连接对象Connection对象接待它. 一个用户对应一个线程,这个线程中的Connection ...

  9. 对Spring 容器管理事务支持的总结

    1.问题 Connection conn = DataSourceUtils.getConnection(); //开启事务 conn.setAutoCommit(false); try { Obje ...

随机推荐

  1. ASP.net 中关于Session的存储信息及其它方式存储信息的讨论与总结

    通过学习和实践笔者总结一下Session 的存储方式.虽然里面的理论众所周知,但是我还是想记录并整理一下.作为备忘录吧.除了ASP.net通过Web.config配置的方式,还有通过其它方式来存储的方 ...

  2. 正则-匹配获取url参数

    1.根据指定参数名获取参数值 A页面向连接到B页面的url为: http://www.189dg.com/ajax/sms_query.ashx?action=smsdetail&sid=22 ...

  3. mysql 分区信息查看

    select partition_name part,partition_expression expr,partition_description descr,table_rows from INF ...

  4. 导出函数结构 EXPORT_DIRECTORY

    typedef struct _IMAGE_EXPORT_DIRECTORY { DWORD Characteristics; DWORD TimeDateStamp; //输出表的创建时间 WORD ...

  5. Autofact 的使用

    资料: http://www.cnblogs.com/linhan/p/4298971.html --其他博友 http://autofac.org/# --官网 http://efmvc.codep ...

  6. Java比较两个日期的大小

    public static String getComparedSBQDate(String yxqq,String starttime){ String str = starttime; Simpl ...

  7. 设定PCB电路板形状和物理边界

    1 设定PCB电路板形状和物理边界 在Protel DXP的PCB板文件向导中,我们已经初步确定了电路板的形状和物理边界.但我们在绘制PCB板之前,也许还会对电路板的边界的细节加以调整.如果我们要对电 ...

  8. Xamarin.Forms-VS安装调试错误

    编译android项目报错检查android sdk 是否安装成功后发现报错如下图:     点击->工具->android sdk manager 报错 错误原因没有找到 android ...

  9. SpringMVC 拦截器(interceptors)对样式(css),JavaScript(js),图片(images)链接的拦截

    因为在web.xml配置了 <servlet-mapping> <servlet-name>appServlet</servlet-name> <url-pa ...

  10. ie浏览器中 overflow:hidden无作用的解决方案

    原因: overflow:hidden失效 当父元素的直接子元素或者下级子元素的样式拥有position:relative属性时,父元素的overflow:hidden属性就会失效. 我在ie内发现子 ...