当前位置: 首页 > 知识库问答 >
问题:

Jdbc连接池,具有按用户名缓存的连接

哈烨熠
2023-03-14

我正在用自动配置的Tomcat池数据源开发基于spring boot的应用程序。我必须在不同的DB模式下调用相同的Oracle存储过程(它们都有执行授权),而且我事先没有指定的用户/密码列表。但在程序调用的时候我知道凭据。我使用dataSource对象的getConnection(user,password)方法来接收连接并且工作良好。但是,如果我一个一个地调用过程三次--对于用户A,用户B,再一次调用用户A,连接方法reconnect()将被调用两次(对于用户B和对用户A的第二次调用)--因为DataSource中使用的ConnectionPool对象从空闲队列中弹出相同的连接,检查其用户和密码,并使用新的凭据再次连接到DB。结果,我失去了连接池的所有好处。

你能告诉我,请,一些连接池的实现,它缓存空闲连接的用户名?或者用其他方法来减少重新连接的时间?不幸的是,我无法更改Oracle过程,甚至无法为其实现包装器。

共有1个答案

皇甫展
2023-03-14

C3P0 ComboPooledDataSource是一个很好的解决方案。它使用userpassword键将连接池存储在Map中

 类似资料:
  • 我们有一个spring-boot应用程序,它使用嵌入式tomcat进行部署,并使用MySQL后端的默认tomcat-jdbc连接池,而没有为MySQL或tomcat端定制。 该应用程序有一些调度程序,它们主要在一天中的特定时间运行,即在昨天的最后一次cron运行和今天的第一次cron运行之间,有超过9个小时的间隙。然而,无论何时cron在早期运行,它都从未遇到过空闲连接问题。 现在我们看到一条错误

  • 前几天我经历了应用程序的中断,我需要了解以后如何避免这种情况。 我们有一个运行在Tomcat7上的基于Java的web应用程序。应用程序连接到几个不同的数据源,包括Oracle数据库。 下面是我对连接验证的理解。 连接在空闲时(testWhileIdle=false)、借用时(testOnBorrow=false)、返回时(testOnReturn=false) 由于timeBetweenEvic

  • 我使用作为我的数据源实现,我的代码获取连接并关闭连接,如下所示: 当我完成连接工作时,我将关闭它 我的问题是:确实是关闭的,所以当连接像一样关闭时,数据源是如何工作的。我听说datasource connection close并不是真正的close,只是release,但我在datasource类中找不到release API。我想知道datasource如何管理数据库连接的创建、关闭和释放。

  • 我们刚刚从dbcp迁移到tomcat jdbc连池。我们在加载中尝试了系统,收到了以下异常: 请注意: 不忙的连接在哪里?忙的数字在这之后一直在下降,但我们仍然没有得到任何连接。 有什么想法吗? 配置: env:ubuntu和tomcat 6. db-mysql

  • 我正在尝试使用google cloud sql和云endpoint开发一个应用程序,从google cloud sql文档中我发现google loud sql的连接器不提供任何连接池机制,我尝试在线搜索以获得任何可能的教程或文档,这些教程或文档提供了池机制,但没有结果,google文档只是指出,您应该在finally块中关闭连接,而不需要任何连接池配置。我还遇到了BoneCp、TomcatDbC

  • Tomcat在使用后不释放连接的原因可能是什么? 这是我的配置