我使用org.apache.commons.dbcp.BasicDataSource
作为我的数据源实现,我的代码获取连接并关闭连接,如下所示:
Connection conn = dataSource.getConnection();
当我完成连接工作时,我将关闭它
conn.close();
我的问题是:conn.close()
确实是关闭的,所以当连接像conn.close()
一样关闭时,数据源是如何工作的。我听说datasource connection close并不是真正的close,只是release,但我在datasource类中找不到release API。我想知道datasource如何管理数据库连接的创建、关闭和释放。
顺便问一个小问题:datasource如何刷新连接,我的意思是如果datasource的连接已经一年没有使用了,datasource如何保持连接可用?
对数据源连接的调用不一定会关闭数据库连接。它只会返回到池的连接以供重用。这样做的方式是,到数据库的实际连接用一个类PooledConnection修饰,并且覆盖这个PooledConnection上的方法,将连接标记为可用。
数据源(DataSource)表示可以从中获取数据库连接的抽象概念。
因此,DataSource
本身并没有定义连接管理方式的任何细节,数据源的不同实现可能以不同的方式管理连接:
>
由连接池(例如Apache DBCP或c3p0)支持的实现从池中返回现有连接。此类实现返回的Connection
对象是代理,其关闭()
方法被重写以返回到池的连接而不是关闭它。
如果您想知道连接池是如何管理连接的,请查看连接池实现的文档。
我们正在用Java重写来自PHP的web应用程序。我认为,但我不是很确定,我们可能会在连接池方面遇到问题。应用程序本身是多租户的,是“独立数据库”和“独立模式”的组合。 对于每个Postgres数据库服务器实例,可以有一个以上的数据库(命名为schemax_XXX),其中包含一个以上的模式(模式是租户)。注册时,可能会发生以下两种情况之一: 在编号最高的schema_XXX数据库中创建新的租户模式
前几天我经历了应用程序的中断,我需要了解以后如何避免这种情况。 我们有一个运行在Tomcat7上的基于Java的web应用程序。应用程序连接到几个不同的数据源,包括Oracle数据库。 下面是我对连接验证的理解。 连接在空闲时(testWhileIdle=false)、借用时(testOnBorrow=false)、返回时(testOnReturn=false) 由于timeBetweenEvic
我们有一个spring-boot应用程序,它使用嵌入式tomcat进行部署,并使用MySQL后端的默认tomcat-jdbc连接池,而没有为MySQL或tomcat端定制。 该应用程序有一些调度程序,它们主要在一天中的特定时间运行,即在昨天的最后一次cron运行和今天的第一次cron运行之间,有超过9个小时的间隙。然而,无论何时cron在早期运行,它都从未遇到过空闲连接问题。 现在我们看到一条错误
我们刚刚从dbcp迁移到tomcat jdbc连池。我们在加载中尝试了系统,收到了以下异常: 请注意: 不忙的连接在哪里?忙的数字在这之后一直在下降,但我们仍然没有得到任何连接。 有什么想法吗? 配置: env:ubuntu和tomcat 6. db-mysql
问题内容: 我想我需要更好地了解连接池的概念。我正在使用Java与ConnectorJ一起工作,并将servlet部署在Apache Tomcat服务器上。我一直在关注该文档,因此我的Tomcat context.xml如下所示: 我使用推荐的方式从数据源获得连接: 我的问题是:为什么我必须在context.xml中为我的数据源指定用户和密码。如果我错了,请纠正我,但我认为连接池的重点是重用拥有相
问题内容: 我在GlassFish上有一个Java-JSF Web应用程序,我想在其中使用连接池。因此,我创建了一个有范围的Bean,可与其他Bean的实例一起使用: 这样,连接池很快就会被填满。在“ db-related”视图中进行几次导航后,应用程序将停止以下操作: RAR5117:无法从连接池[mysql_testPool]获取/创建连接。原因:使用中的连接等于最大池大小和已过期的最大等待时