在 DataSource 接口上,我发现了两种获取 Connection 的方法,有和没有用户名和密码参数。
连接 getConnection() 连接getConnection(字符串用户名,字符串密码)
表示我想使用从服务器(tomcat)公开为 JNDI 资源的连接池,这两种方法有什么区别?
在 DataSource 接口上,我发现了两种获取 Connection 的方法,有和没有用户名和密码参数。
连接 getConnection() 连接getConnection(字符串用户名,字符串密码)
表示我想使用从服务器(tomcat)公开为 JNDI 资源的连接池,这两种方法有什么区别?
根据DataSource
实现,这两种方法做不同的事情。第一个没有参数,只是从池中获取 a ,配置了在创建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
:此 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
这是方法重载。
从池中借用连接。如果连接可用(在空闲队列中)或池未达到 maxActive 连接,则立即返回连接。如果没有可用的连接,池将尝试在 maxWait 毫秒内获取连接。
返回: Connection - java.sql.Connection/javax.sql.PooledConnection 反射代理,包装底层对象。
从池中借用连接。如果连接可用(在空闲队列中)或池未达到 maxActive 连接,则立即返回连接。如果没有可用的连接,池将尝试在 maxWait 毫秒内获取连接。