我正在使用自动配置的 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/