0

我使用 Oracle 的通用连接池。我在这个计划上工作

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完成后调用,或者使用池的整个感觉是否会丢失并且那里的连接应该保持打开状态,直到它们自己超时关闭?

4

1 回答 1

1

TL;博士。是的,关闭它们。它实际上并没有关闭,它返回到连接池以进行下一次 getConnection() 调用。

完整的文档在这里: https ://docs.oracle.com/cd/E11882_01/java.112/e12265/connect.htm#CHDJCGGB

不再使用的借用连接应返回到池中,以便它们可用于下一个连接请求。close 方法用于关闭连接并自动将连接返回到池中。close 方法不会从池中物理删除连接。

未关闭的借用连接将保持借用状态;如果没有可用的连接,则后续的连接请求会导致创建新的连接。此行为可能会导致创建许多连接并可能影响系统性能。

于 2018-02-23T15:21:20.043 回答