2

在 DataSource 接口上,我发现了两种获取 Connection 的方法,有和没有用户名和密码参数。

连接 getConnection()
连接getConnection(字符串用户名,字符串密码)

表示我想使用从服务器(tomcat)公开为 JNDI 资源的连接池,这两种方法有什么区别?

4

2 回答 2

3

根据DataSource实现,这两种方法做不同的事情。第一个没有参数,只是从池中获取 a ,配置了在创建Connection时配置的凭据。DataSource第二个,它接受的凭据,将从DataSource使用这些凭据打开的连接中获取一个连接,或者它将使用这些凭据创建一个新Connection的,或者——如果 JDBC 驱动程序支持它——它将采用现有的Connection并切换凭据(我不确定这是否真的可能)。

不幸的是,JavaDoc (http://docs.oracle.com/javase/7/docs/api/javax/sql/DataSource.html) 并没有真正让您了解为什么一个人可能会调用一个而不是另一个。显而易见的原因是因为您想使用不是为整个DataSource.

DataSourceTomcat 将为您配置的默认值BasicDataSource来自 Apache commons-dbcp:此 DataSource 不支持该getConnection(String username, String password)方法。Tomcat 的最新版本附带,如果您在元素上设置属性tomcat-pool,它是一个替代的 DataSource 实现,支持这种替代机制(尽管当前文档说它不支持) 。alternateUsernameAllowed="true"<Resource>

Tomcat 池文档:http: //tomcat.apache.org/tomcat-7.0-doc/jdbc-pool.html

于 2012-06-12T13:11:02.473 回答
0

这是方法重载。

连接 getConnection()

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

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

getConnection(字符串用户名,字符串密码)

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

于 2012-06-12T12:27:28.077 回答