Ограничение длительности запроса в БД

Добрый вечер.
В проекте есть дополнительный datastore на oracle. Часть запросов выполняются стандартно, через data loaders в экранах, часть через вызов хранимых процедур из сервиса.
Иногда запросы могут выполняться очень долго (десятки секунд).
Каким образом можно задать лимиты на выполнение запроса:

  • общий на приложение
  • на конкретный запрос

Пробовал играться с jdbcTemplate, но так ничего путного и не получилось.
Спасибо.

Добрый день,

Общий таймаут на приложение можно задать в настройках пула соединений (connection pool).
Например для commons-dbcp2, который раньше использовался по умолчанию в CUBA, а сейчас используется только для JNDI datasource mode, соответствующий параметр это defaultQueryTimeout.
https://commons.apache.org/proper/commons-dbcp/configuration.html

Для HikariCP настройку нужно поискать, сходу не знаю.

Таймаут на конкретный запрос можно задать с помощью query hints.
см. тут: https://doc.cuba-platform.com/manual-7.2-ru/query.html#query_hints

org.eclipse.persistence.config.QueryHints#JDBC_TIMEOUT

    /**
     * "eclipselink.jdbc.timeout"
     * <p>Configures the JDBC timeout of the query execution, if the database query exceeds the timeout
     * the database will terminate the query and return an exception.
     * Valid values are Integer or Strings that can be parsed to int values.
     * @see org.eclipse.persistence.queries.DatabaseQuery#setQueryTimeout(int)
     */
    public static final String JDBC_TIMEOUT = "eclipselink.jdbc.timeout";

Причем Statement.setQueryTimeout() должен корректно поддерживаться версией используемого вами JDBC-драйвера Oracle.

Можно также воспользоваться свойством приложения cuba.defaultQueryTimeoutSec и параметрами транзакций.