在 DataSource 接口(interface)上,我发现了两种获取连接的方法,有或没有用户名和密码参数。
Connection getConnection() Connection getConnection(String username, String password)
声明我想使用从服务器 (tomcat) 公开为 JNDI 资源的连接池,这两种方法有何区别?
最佳答案
取决于DataSource
实现上,这两个方法做了不同的事情。第一个没有任何参数,只是获得 Connection
从池中,使用 DataSource
时配置的凭据进行配置被创建。第二个接受新凭据,将从 DataSource
获取连接。使用这些凭据打开的文件,否则它将创建一个新的 Connection
使用这些凭据,或者 - 如果 JDBC 驱动程序支持它 - 它将采用现有的 Connection
并切换凭据(我不确定这是否真的可能)。
不幸的是,JavaDoc (http://docs.oracle.com/javase/7/docs/api/javax/sql/DataSource.html) 并没有真正让您了解为什么一个人可能会调用一个而不是另一个。明显的原因是因为您想要使用除为整个 DataSource
配置的凭据之外的凭据进行连接。 .
默认DataSource
Tomcat 将为您配置的是 BasicDataSource
来自 Apache commons-dbcp
:此数据源不支持getConnection(String username, String password)
方法。 Tomcat 的最新版本附带 tomcat-pool
,这是一个替代的 DataSource 实现,如果您设置 alternateUsernameAllowed="true"
,它确实支持这种替代机制(尽管当前文档说不支持)。您的 <Resource>
上的属性元素。
Tomcat 池文档:http://tomcat.apache.org/tomcat-7.0-doc/jdbc-pool.html
关于tomcat - getConnection() 和 getConnection(String username, String password) 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10996481/