在DataSource界面上,我找到了两种获取Connection的方法,包括和不包含用户名和密码参数。
Connection getConnection() Connection getConnection(String username, String password)
声明我想使用从服务器(tomcat)公开为JNDI资源的连接池与这两种方法有什么不同?
答案 0 :(得分:3)
根据DataSource
实现,这两种方法可以做不同的事情。第一个没有参数,只是从池中获取Connection
,配置了在创建DataSource
时配置的凭据。第二个接受新凭据,将从使用这些凭据打开的DataSource
获取连接,或者它将使用这些凭据创建新的Connection
或 - 如果JDBC驱动程序支持它 - 它将需要一个现有的Connection
并切换凭据(我不确定这是否真的可能)。
不幸的是,JavaDoc(http://docs.oracle.com/javase/7/docs/api/javax/sql/DataSource.html)并没有真正让你深入了解为什么人们可以打电话给对方。显而易见的原因是,您希望使用除为整个DataSource
配置的凭据以外的凭据进行连接。
Tomcat将为您配置的默认DataSource
是来自Apache BasicDataSource
的{{1}}:此DataSource不支持commons-dbcp
方法。 Tomcat的最新版本附带getConnection(String username, String password)
,如果您设置tomcat-pool
,它是 支持此备用机制的替代DataSource实现(尽管当前文档说它没有)您alternateUsernameAllowed="true"
元素的属性。
Tomcat-pool文档:http://tomcat.apache.org/tomcat-7.0-doc/jdbc-pool.html
答案 1 :(得分:0)
这是方法重载。
从池中借用连接。如果连接可用(在空闲队列中)或池未达到maxActive连接,则立即返回连接。如果没有可用的连接,则池将尝试获取maxWait毫秒的连接。
返回:连接 - 包装底层对象的java.sql.Connection / javax.sql.PooledConnection反射代理。
getConnection(String username, String password)
从池中借用连接。如果连接可用(在空闲队列中)或池未达到maxActive连接,则立即返回连接。如果没有可用的连接,池将尝试获取maxWait毫秒的连接。