java - 用户的每个请求都会调用一个新的 getConnection()?

标签 java connection weblogic datasource

数据库连接如下所示

public Connection getDBConection(){  
   Context context = new InitialContext();  
   DataSource dataSource = (javax.sql.DataSource) context.lookup("java:myDataSource");  
   Connection conn = dataSource.getConnection();  
}  

对于userA,每个数据库请求是否应该调用getDBConnection()一次;但不需要控制所有请求使用相同的连接?

也就是说,如果userA有3个数据库请求,那么userA应该调用getDBConnection() 3次,并在每次请求使用后调用Connection.close()

如果userA调用getDBConnection()三次(即调用dataSource.getConnection()三次),是否创建了三个连接?或者它是未知的并且由weblogic控制?

感觉很乱,是不是一个数据库请求就应该有一个新的连接?或者只需为每个数据库请求调用DataSource.getConnection(),创建的新连接数量由Web服务器控制,无需考虑实际创建了多少连接。

最佳答案

每次调用DataSource.getConnection时,数据源都会为您检索连接。确实,返回的连接没有被其他人主动使用,但它不一定是全新的连接。

例如,如果您使用连接池,这是一种很常见的做法,那么当您调用Connection.close时,连接实际上并没有关闭,而是返回到一个可用的池中连接。然后,当您调用 DataSource.getConnection 时,连接池将查看是否有尚未分发的空闲连接。如果是这样,它通常会测试它们是否已经过时(通常通过对虚拟表执行非常快速的查询)。如果没有,它将把现有的连接返回给调用者。但如果连接已过时,连接池将从底层数据库驱动程序中检索真正的新连接,并将其返回。

通常,连接池在任何时候都会保留最大数量的实际连接(例如 50)。如果您的应用程序尝试请求超过 50 个并发连接,DataSource.getConnection 将引发异常。或者在某些实现中,它将阻塞一段时间,直到有一个可用为止,然后在该时间到期后抛出异常。有关示例实现,请查看 Apache Commons DBCP .

希望这能回答您的问题!

关于java - 用户的每个请求都会调用一个新的 getConnection()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15161449/

相关文章:

java - 正则表达式用空格替换部分字符串

java - 如何在spring中使用HandlerInterceptor读取请求参数值?

java - 如何在剪贴簿中定义类或导入类?

javascript - 无网络连接时10分钟后再次执行JavaScript

java - 嵌套异常: java. lang.NoClassDefFoundError:org/springframework/context/annotation/AnnotationConfigApplicationContext

java - 如何使用 Java 创建类以将文档保存在 MongoDB 中

FTP - `Name or service not know`

android - Android Studio Gradle错误

java - 在Weblogic 10.0中定义简单的字符串JNDI属性

java web应用程序在oracle weblogic服务器上使用axis2错误