我使用Oracle的Universal连接池。我正在研究这个计划
class Action {
static PoolDataSource initPool() {
PoolDataSource pds = PoolDataSourceFactory.getPoolDataSource();
pds.setConnectionFactoryClassName("oracle.jdbc.pool.OracleDataSource");
pds.setURL(".........");
pds.setUser("user");
pds.setPassword("pass");
pds.setInitialPoolSize(0);
return pds;
}
static final PoolDataSource pds = initPool();
void doAction() {
Connection connection = pds.getConnection();
..........
connection.close(); // ????
}
}
你需要在connection.close()
完成后调用doAction
吗?或者整个游泳池的工作感觉是否会丢失,那里的连接应该保持打开状态,直到它们自己在超时时关闭?
答案 0 :(得分:1)
TL; DR。是关闭他们。它实际上并没有关闭,它会返回连接池以进行下一次getConnection()调用。
完整的文档在这里: https://docs.oracle.com/cd/E11882_01/java.112/e12265/connect.htm#CHDJCGGB
应返回不再使用的借用连接 到游泳池,以便它们可用于下一次连接 请求。 close方法用于关闭连接和 自动返回到池的连接。关闭方法 不会从池中物理删除连接。
未被关闭的借用连接将继续借用; 后续的连接请求导致新连接 如果没有可用的连接,则创建。这种行为可能会导致很多 要创建的连接,可能会影响系统性能。