java - Jdbc连接池,按用户名进行连接缓存

标签 java jdbc

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

您能否告诉我,连接池的某些实现是否可以按用户名缓存空闲连接?或者也许有其他方法可以减少重新连接时间?不幸的是,我无法更改 Oracle 过程,甚至无法为其实现包装器。

最佳答案

C3P0 ComboPooledDataSource 是非常好的解决方案。它使用用户|密码 key 将连接池存储在Map中

关于java - Jdbc连接池,按用户名进行连接缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39104089/

相关文章:

java - 无法使用 Java 中的 DocumentBuilder 解析重复的 xml 标记值

java - 想要在java中显示从mysql数据库检索到的多个数据

jdbc - 基于查询的 JDBC 源连接器 Kafka

java - mysql jdbc应用超过用户名最大长度(16个字符)

java - 使用 entityClass.newInstance() 创建的实例上的 invokeExact 导致 java.lang.invoke.WrongMethodTypeException?

java - android bad token异常无法在WindowManager服务中添加窗口

java - 使用 mysql-connector-java-5.1.24 将 Java 连接到 MySQL

sql-server - jdbc SQL错误: statement did not return a result set

java - 如何在spring mvc中使 session 无效以实现注销功能

java - 正则表达式或其他从列表中获取所有元素名称