gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 07:18:43 25 4
gpt4 key购买 nike

数据库连接如下所示

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

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

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

如果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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com