我正在使用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环境使用相同的代码,以便重新建立池中的无效连接?
谢谢。
答案 0 :(得分:0)
如果您的数据库已启动并正在运行,则isValid()将返回true,指示应用程序可以连接到数据库。但是,在生产系统中,将有许多节点,如果其中一个节点发生故障,则UCP将获得其他节点的连接。让我知道是否可以澄清您的问题。