Spring - JdbcTemplate.call () приводит к ненужному уничтожению с помощью хранимых процедур - PullRequest
0 голосов
/ 14 февраля 2020

мы работаем в реальном проекте с JdbcTemplate и SimpleJedbcCall для вызова хранимых процедур, в которых инкапсулированы основные бизнес-логи c.

К сожалению, наша база данных является более старой версией Sybase ASE. Для предупреждения об ошибке Sybase можно вызвать функцию raiserror 'bad error', 99999, используя явный код ошибки. Эти коды ошибок должны находиться в определенном c диапазоне, но, например, быть более 17000, чтобы не быть системным исключением базы данных.

Наша проблема заключалась в том, что при вызове CallableStatement.getMoreResults () эта ошибка был брошен как SybException, реализующий SqlException, что приводит к исключению ( Строка 1096 ) и отмене соединения.

Мы сделали расширение JdbcTemplate и переопределение extractReturnedResults - метод для регистрации проблемы и продолжения с нашей хранимой процедурой, включая такие вещи, как обработка транзакций. Из-за этих открытых транзакций у нас были действительно большие проблемы с производительностью и отслеживанием стека в нашей базе данных.

                try {
                    moreResults = cs.getMoreResults();
                    updateCount = cs.getUpdateCount();
                } catch (SybSQLException ex) {
                    MDC.put("errorLogId", String.format("%s-%s", nvTask.getApplikation(), nvTask.getTaskId()));
                    errLog.error("AUTOMAT_ERROR | orderNumber={}, procedure={}, line={}, message={}, errorCode={}, taskId={}, dbProcessId={}",
                            orderNumber, ex.getProcedureName(), ex.getLineNumber(), ex.getMessage(), ex.getErrorCode(),
                            nvTask.getTaskId(), dbProcessId);
                    MDC.remove("errorLogId");
                }
                if (logger.isTraceEnabled()) {
                    logger.trace("CallableStatement.getUpdateCount() returned " + updateCount);
                }

Мой вопрос заключается в том, может ли такое поведение происходить и в других типах баз данных, если может быть универсальное c решение для избежать разрыва связи? Я открыт для любых советов и заранее спасибо.

Ура, Уве

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