getConnection()ad getConnection(String username,String password)之间的差异

时间:2012-06-12 12:16:35

标签: tomcat connection database-connection connection-pooling sqldatasource

在DataSource界面上,我找到了两种获取Connection的方法,包括和不包含用户名和密码参数。

Connection getConnection()
Connection getConnection(String username, String password)

声明我想使用从服务器(tomcat)公开为JNDI资源的连接池与这两种方法有什么不同?

2 个答案:

答案 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)

这是方法重载。

Connection getConnection()

从池中借用连接。如果连接可用(在空闲队列中)或池未达到maxActive连接,则立即返回连接。如果没有可用的连接,则池将尝试获取maxWait毫秒的连接。

返回:连接 - 包装底层对象的java.sql.Connection / javax.sql.PooledConnection反射代理。

getConnection(String username, String password)

从池中借用连接。如果连接可用(在空闲队列中)或池未达到maxActive连接,则立即返回连接。如果没有可用的连接,池将尝试获取maxWait毫秒的连接。