Есть ли способ установить таймер реального времени для тайм-аута транзакции DataSourceTransactionManager в Spring? - PullRequest
0 голосов
/ 03 мая 2019

Как мне известно, поведение тайм-аута транзакции по умолчанию в Spring DataSourceTransactionManager заключается в том, что он проверяет время начала транзакции и устанавливает предельное время транзакции на основе настроек AOP транзакции.После этого он проверяет, превысило ли текущее время предельное время каждый раз, когда транзакция выполняет запрос с DataSource, и, если это так, TransactionManager генерирует TransactionTimedOutException.

Из-за вышеизложенного я не могу зависеть от предельного времени транзакции, когда служба транзакций выполняет только один запрос.

Есть ли способ установить таймер транзакции в реальном времени для DataSourceTransactionManager, основанный на потоках таймера?

1 Ответ

0 голосов
/ 03 мая 2019

Тайм-ауты на уровне выписки / запроса (в сравнении с тайм-аутами на уровне транзакций) могут работать на вас. Есть много способов их установить, в зависимости от ваших настроек:

  • Подсказка к запросу javax.persistence.query.timeout
  • Hibernate's Query.setTimeout()
  • JDBCTemplate.setQueryTimeout() (это также можно установить глобально)
  • С простым JDBC мы можем установить время ожидания запроса на Statement и PreparedStatement

Тайм-ауты на уровне операторов требуют поддержки драйвера, поэтому поведение может варьироваться в зависимости от реализации. Кроме того, они не гарантированно работают, если существуют необычные ситуации, такие как проблемы с сетью (но вы также можете установить таймауты сетевого уровня).

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