`

将connection存放在Threadlocal里和数据库连接池的区别

 
阅读更多

我有几点不太明白的,望各位大侠指教下。
1、j2ee的应用中,有一个用户请求就会启动一个线程。而如果我们把connection放在Threadlocal里的话,那么我们的程序只需要一个connection连接数据库就行了,每个线程都是用的connection的一个副本,那为什么还有必要要数据库连接池呢?
2、在这种情况下一个副本里的connection执行了关闭操作,其他都没执行。那么想问一下真正与数据库连接的connection什么时候关闭呢?
3、显然上面的第一个问题是不成立的,但是希望哪位大侠帮我解释下。解释下什么时候是从数据库连接池里取connection而什么时候获得的是connection的一个Threadlocal副本?

 

-------------------------------------------------------------------------------------------

 

由于请求中的一个事务涉及多个 DAO 操作,而这些 DAO 中的 Connection  
不能从连接池中获得,如果是从连接池获得的话,两个 DAO 就用到了两个
Connection,这样的话是没有办法完成一个事务的。

DAO 中的 Connection 如果是从 ThreadLocal 中获得 Connection 的话那
么这些 DAO 就会被纳入到同一个 Connection 之下。当然了,这样的话,
DAO 中就不能把 Connection 给关了,关掉的话,下一个使用者就不能用了。

分享到:
评论

相关推荐

    JAVA 使用数据库连接池连接Oracle数据库全代码

    ### JAVA 使用数据库连接池连接Oracle数据库全代码解析 #### 一、概述 本文将详细介绍如何在Java项目中使用Apache DBCP(Database Connection Pool)来连接Oracle数据库,并提供完整的示例代码。通过这种方式,我们...

    数据库连接池原理

    综上所述,数据库连接池通过优化数据库连接的获取、使用和归还过程,极大地提高了应用程序与数据库交互的效率和性能。通过合理的设计和配置,可以有效避免资源浪费,减轻数据库服务器的压力,并提升整体系统的稳定性...

    JAVA数据库连接池(C3P0,Druid,JNDI ,DBCP,Proxool,BoneCP)

    数据库连接池在Java应用开发中扮演着至关重要的角色,它能有效地管理数据库连接,提高系统性能,降低资源消耗。本文将详细介绍几个常见的Java数据库连接池实现:C3P0、Druid、JNDI、DBCP、Proxool以及BoneCP,并结合...

    ThreadLocal和事务

    在Java编程领域,ThreadLocal和事务管理是两个关键的概念,特别是在构建复杂且高效的Web应用程序时。ThreadLocal是一种线程局部变量,而事务则是数据库操作的原子性保证。在这个小型简单练习中,我们看到如何结合c3p...

    JavaEE DBUtil结合ThreadLocal的一个案例

    在高并发环境中,为了确保性能和线程安全,开发人员经常采用ThreadLocal来实现每个线程拥有自己独立的数据库连接,避免了传统方式下连接池的频繁创建和释放,从而提高了系统效率。下面我们将详细探讨JavaEE中DBUtil...

    不平凡的数据库连接类

    1. **连接池**:使用连接池(如Apache的DBCP或C3P0)管理数据库连接,每个线程在需要时从池中获取连接,用完后归还,而不是直接创建新的连接。这样既能避免频繁创建和关闭连接的开销,也能确保线程之间的连接不会...

    Spring事务处理-ThreadLocal的使用

    在IT行业中,Spring框架是Java开发中的核心组件,尤其在企业级应用开发中扮演着重要角色。...同时,了解数据库连接池的工作原理也有助于我们更好地配置和使用连接池,提升应用程序的性能和稳定性。

    事务的封装和Threadlocal实例

    总的来说,结合JDBC的事务管理和ThreadLocal,我们可以在多线程环境中更好地实现数据库操作,确保数据的一致性,并提高代码的可复用性和安全性。通过使用ThreadLocal,我们可以创建线程安全的变量,使得每个线程都能...

    ThreadLocal

    ThreadLocal的一个经典应用场景是在数据库连接池中,每个线程都可以有自己的数据库连接,而无需在多个线程间共享,这样可以简化代码并提高性能。另外,它也可以用于HTTP请求上下文,存储请求相关的数据,如用户会话...

    ThreadLocal原理及在多层架构中的应用.pdf

    在没有使用连接池的原始JDBC方式中,每次通过DriverManager.getConnection()获得的连接都对应一个事务,而这种方式在高并发情况下会造成性能瓶颈。为了解决这个问题,通常会使用数据库连接池技术,配合ThreadLocal...

    java连接数据库(工具类的封装)

    为了提高代码的复用性和可维护性,通常会将数据库连接操作封装到一个工具类中。本篇文章将详细讲解如何创建一个用于连接MySQL数据库的Java工具类。 首先,确保你的项目中已经包含了JDBC驱动,对于MySQL,这通常是`...

    springboot-AOP实现多数据源动态切换(Druid连接池)

    这个切面可以利用ThreadLocal变量来存储当前线程所使用的数据源标识,确保在同一个线程内,对数据库的操作使用相同的连接。具体实现中,需要定义一个Pointcut来指定哪些方法触发数据源切换,以及一个Advice来执行...

    Spring+Hibernate下的数据库连接动态切换

    3. 使用`ThreadLocal`将数据库名称绑定到当前线程。 4. 在请求结束时移除线程局部变量。 #### 七、数据源配置 在Spring配置文件中,我们可以通过配置`AbstractRoutingDataSource`类来实现动态数据源切换。这个类...

    连接数据库

    它预先创建一定数量的数据库连接,并将这些连接保存在一个池中。当应用程序需要访问数据库时,可以从连接池中获取一个空闲连接;当使用完毕后,再将连接归还到连接池中,供其他请求使用。这种方式可以显著提高应用...

    数据连接池用法(C3PO,proxool,dbcp,bonecp)

    数据连接池是数据库管理中非常重要的一环,它的主要作用是提高数据库访问效率,减少数据库资源的创建和销毁过程中的开销。本文将详细介绍四个常见的Java数据连接池组件——C3PO、Proxool、DBCP和BoneCP的配置与用法...

    多种数据库连接配置(oracle\mysql\access)

    在IT领域,数据库连接配置是实现数据访问和管理的关键步骤,尤其当涉及到多种数据库类型如Oracle、MySQL和Access时,合理的配置能极大地提高系统的稳定性和效率。本文将深入解析多种数据库连接配置的知识点,包括...

    ThreadLocal的几种误区

    3. 存储数据库会话:在Spring Hibernate ORM中,ThreadLocal常用来保存数据库连接的Session,确保每个线程有自己的Session,避免线程间的资源冲突。 总之,ThreadLocal是一个强大的工具,但理解其工作原理和潜在...

    threadLocal

    例如,数据库连接池通常会提供一个ThreadLocal的静态变量,使得每个线程都能快速获取到专属的数据库连接,提高并发性能。 关联知识点: 1. 多线程:理解ThreadLocal的使用必须建立在对多线程的理解基础上,包括线程...

    设计模式及ThreadLocal资料

    单例模式在控制资源的共享、管理配置对象等方面非常有用,例如数据库连接池的管理。 其次,工厂模式是创建型设计模式之一,它提供了一种创建对象的最佳方式。在工厂模式中,用户无需知道具体产品类的名称,只需知道...

    JDK的ThreadLocal理解(一)使用和测试

    - **线程上下文信息**:例如,在数据库连接池中,每个线程可以有一个单独的连接,通过ThreadLocal保存,这样可以避免频繁地创建和关闭连接。 - **请求上下文传播**:在Web开发中,可以将HttpServletRequest对象放入...

Global site tag (gtag.js) - Google Analytics