在Oracle UCP池中重新建立连接

时间:2018-10-01 10:36:00

标签: oracle jdbc connection-pooling ucp

我正在使用Oracle UCP JDBC,以下方法用于从连接池中获取连接。

private static PoolDataSource poolDataSource;

....

static synchronized Connection createConnection() throws SQLException {
    if (poolDataSource == null) {
        poolDataSource = PoolDataSourceFactory.getPoolDataSource();
        poolDataSource.setConnectionFactoryClassName("oracle.jdbc.pool.OracleDataSource");
        poolDataSource.setURL(url);
        poolDataSource.setUser(user);
        poolDataSource.setPassword(password);
        poolDataSource.setInitialPoolSize(1);
        poolDataSource.setMinPoolSize(1);
        poolDataSource.setMaxPoolSize(10);
    }
    Connection connection = poolDataSource.getConnection();
    return connection;
}

我知道有Connection.isValid()方法来检查从池中获得的连接是否有效。但是,如果isValid()返回false,该怎么办?如何强制连接池重新建立连接?

此外,请注意,在我们的测试环境中,我们没有使用RAC(真实应用程序集群),但是在生产环境中,我们确实使用了RAC。我已经读过,对于RAC,我们需要在代码中进行一些配置才能使RAC正常工作。

是否可以为RAC和非RAC环境使用相同的代码,以便重新建立池中的无效连接?

谢谢。

1 个答案:

答案 0 :(得分:0)

如果您的数据库已启动并正在运行,则isValid()将返回true,指示应用程序可以连接到数据库。但是,在生产系统中,将有许多节点,如果其中一个节点发生故障,则UCP将获得其他节点的连接。让我知道是否可以澄清您的问题。