tomcat - getConnection() 和 getConnection(String username, String password) 之间的区别

标签 tomcat connection database-connection connection-pooling sqldatasource

在 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/

相关文章:

batch-file - TeamCity——启动tomcat

java - 带有Tomcat的Spring MVC不会打开Hello World html页面

connection - GraphQL Connections for Relay 中的游标有哪些限制?

c# - 如何检查我的 C# - MySQL 连接是否成功,或者如果不成功,返回原因?

c# - 数据库连接C#

mysql - 操作错误: (1698, "Access denied for user ' cotequotey'@'localhost'“)

Tomcat 7 中的 session 和并行部署

c# - 使用 C# 获取应用程序打开的所有 TCP 连接

php - 如何检查 Zend_Db_Adapter_Pdo_Mysql 对象是否连接到数据库

java - 在 servlet 的 doGet() 中安全地使用静态编译模式 - matcher.replaceAll()