我正在使用自动配置的Tomcat池 DataSource 开发基于Spring引导的应用程序。我必须在不同的DB模式下调用相同的Oracle存储过程(对所有这些模式都有执行授权),并且我没有事先指定用户/密码列表。但是在程序调用时我知道凭据。我使用dataSource对象的 getConnection (用户,密码)方法来接收连接,它工作正常。但是,如果我将逐个调用过程三次 - 对于用户A,用户B和用户A,连接方法reconnect()将被调用两次(对于用户B和对用户A的第二次调用) - 因为< strong> ConnectionPool 对象,在 DataSource 中使用,从空闲队列中弹出相同的连接,检查其用户和密码,并使用新凭据再次连接到DB。结果,我失去了连接池的所有好处。
请问,请问一些连接池的实现,它通过用户名缓存空闲连接?或者可能是另一种减少重新连接时间的方法?不幸的是,我无法改变Oracle程序甚至为它实现包装。
答案 0 :(得分:2)
C3P0 ComboPooledDataSource是一个非常好的解决方案。它使用用户|密码密钥
在Map中存储连接池