3.4.5.4. Параметры транзакций
- Таймаут транзакции
-
Для создаваемой транзакции может быть указан таймаут в секундах, при превышении которого транзакция будет прервана и откачена. Таймаут транзакции ограничивает максимальную длительность запросов к базе данных.
При программном управлении транзакциями таймаут включается путем передачи объекта
TransactionParams
в методPersistence.createTransaction()
. Например:Transaction tx = persistence.createTransaction(new TransactionParams().setTimeout(2));
При декларативном управлении транзакциями используется параметр
timeout
аннотации@Transactional
, например:@Transactional(timeout = 2) public void someServiceMethod() { ...
Таймаут по умолчанию может быть задан в свойстве приложения cuba.defaultQueryTimeoutSec.
- Read-only транзации
-
Транзакцию можно пометить как read-only если она предназначена только для чтения данных из БД. Например, все методы
load
в DataManager используют read-only транзакции по умолчанию. Read-only транзакции улучшают производительность системы, потому что платформа не выполняет код, обрабатывающий возможные изменения в сущностях. Кроме того, не вызываютсяBeforeCommit
transaction listeners.Если персистентный контекст read-only транзакции содержит измененные сущности, то при попытке коммита транзакции будет выброшено исключение
IllegalStateException
. Это означает, что помечать транзакцию как read-only следует только если вы уверены, что она не модифицирует никакие сущности.При программном управлении транзакциями признак read-only включается путем передачи объекта
TransactionParams
в методPersistence.createTransaction()
. Например:Transaction tx = persistence.createTransaction(new TransactionParams().setReadOnly(true));
При декларативном управлении транзакциями используется параметр
readOnly
аннотации@Transactional
, например:@Transactional(readOnly = true) public void someServiceMethod() { ...