Пул соединений UCP не может создать соединение после сетевой ошибки базы данных - PullRequest
2 голосов
/ 14 апреля 2019

У меня проблема с универсальным пулом соединений 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 даже после проблем с сетью?

Другими словами, если при сбое сети не удается создать соединение, во второй раз, если приложение теперь может пропинговать базу данных, соединение должно быть установлено?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...