Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 来自用户的每个请求都会调用一个新的getConnection()?_Java_Connection_Weblogic_Datasource - Fatal编程技术网

Java 来自用户的每个请求都会调用一个新的getConnection()?

Java 来自用户的每个请求都会调用一个新的getConnection()?,java,connection,weblogic,datasource,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,每个数据

数据库连接如下所示

public Connection getDBConection(){  
   Context context = new InitialContext();  
   DataSource dataSource = (javax.sql.DataSource) context.lookup("java:myDataSource");  
   Connection conn = dataSource.getConnection();  
}  
对于userA,每个数据库请求都应该调用
getDBConnection()
一次;但是不需要控制所有使用相同连接的请求

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

如果用户调用
getDBConnection()
三次(即调用
dataSource.getConnection()
三次),是否创建了三个连接?还是未知且由weblogic控制


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

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

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

通常,连接池在任何时候都有最大数量的实际连接(例如,50个)。如果应用程序试图同时请求50多个连接,
DataSource.getConnection
将引发异常。或者在某些实现中,它会阻塞一段时间,直到有一个可用,然后在该时间到期后抛出异常。对于示例实现,请查看


希望这能回答你的问题

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

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

通常,连接池在任何时候都有最大数量的实际连接(例如,50个)。如果应用程序试图同时请求50多个连接,
DataSource.getConnection
将引发异常。或者在某些实现中,它会阻塞一段时间,直到有一个可用,然后在该时间到期后抛出异常。对于示例实现,请查看


希望这能回答你的问题

然后,如果userA有三个不同的数据库请求,他应该调用DataSource.getConnection()三次,调用Connection.close()三次,对吗?使用相同的连接为三个数据库请求提供服务是不好的(对于三个不同的数据库请求只调用一次DataSource.getConnection()是不好的,对吗?)我这样问是因为有时我看到创建连接的时间很长,需要缓存该连接,但事实上,这已经由JDBC drvier完成了,不需要由application developer处理?如果您有三个不同的数据库请求,并且它们应该一个接一个地执行(即不是由三个不同线程中的三个不同用户执行),那么无论如何,我都会使用相同的
连接执行它们。我不会依赖以特定方式配置数据源。那么,如果userA有三个不同的数据库请求,他应该调用DataSource.getConnection()三次,调用Connection.close()三次,对吗?使用相同的连接为三个数据库请求提供服务是不好的(对于三个不同的数据库请求只调用一次DataSource.getConnection()是不好的,对吗?)我这样问是因为有时我看到创建连接的时间很长,需要缓存该连接,但事实上,这已经由JDBC drvier完成了,不需要由application developer处理?如果您有三个不同的数据库请求,并且它们应该一个接一个地执行(即不是由三个不同线程中的三个不同用户执行),那么无论如何,我都会使用相同的
连接执行它们。我不会依赖您的数据源以特定的方式进行配置。