Это не имеет ничего общего с Spring.
DataSource.getConnection()
никогда не должен возвращать ноль; он должен либо вернуть действительное соединение, либо выдать SQLException
. Ошибка вызвана неправильным поведением oracle.jdbc.pool.OracleDataSource
.
Обновление
Согласно документации Oracke это происходит, когда:
- максимальное количество соединений уже выделено в пуле;
- ConnectionWaitTimeout установлено в ненулевое значение
- вы ожидали getConnection () в течение этого времени, и в пул не было возвращено ни одного соединения.
Итак, помня об этом, вы можете:
- Проверьте код, чтобы убедиться в отсутствии утечки соединения
- Увеличение размера пула
- Увеличьте время ожидания соединения
- Используйте другой пул :-) или напишите простую оболочку вокруг OracleDataSource, которая проверит возвращаемое значение 'null' и выдаст вместо этого SqlException.
В этом последнем сценарии вы будете обменивать только одно исключение на другое (NPE -> SqlException). Конечно, это будет более уместно, но на самом деле это не решит проблему.