У меня проблема с универсальным пулом соединений Oracle (UCP), реализованным в приложении Scala для базы данных Oracle.
Он отлично работает при наличии соединения с базой данных, но когда в течение ограниченного периода времени в сети возникают проблемы (приложение или база данных отключаются), очевидно, что не удается создать соединение , пока проблема сохраняется, но потом не удается создать новые, когда приложение снова может пропинговать базу данных. Единственный способ возобновить работу приложения - перезапустить его.
Я установил класс, в котором я управляю соединением, и создаю источник данных пула с помощью этого метода:
private def createConnectionPool(
connectionString: String,
username: String,
password: String
): PoolDataSource =
{
val p = PoolDataSourceFactory.getPoolDataSource()
p.setConnectionPoolName("main_ucp_pool")
p.setConnectionFactoryClassName("oracle.jdbc.pool.OracleDataSource")
p.setURL(connectionString)
p.setUser(username)
p.setPassword(password)
p.setInitialPoolSize(5)
p.setMinPoolSize(3)
p.setMaxPoolSize(20)
p
}
private lazy val pds = createConnectionPool('url', 'username', 'pass')
Затем, каждый раз, когда мне нужно соединение с базой данных, я получаю его с помощью вызова этого метода:
pds.getConnection()
Я что-то упустил в коде, или это правда, что источник данных пула должен повторить попытку установить соединение с базой данных при вызове метода getConnection
даже после проблем с сетью?
Другими словами, если при сбое сети не удается создать соединение, во второй раз, если приложение теперь может пропинговать базу данных, соединение должно быть установлено?