Sobes.tech
Middle+

In what cases are default @Transactional settings insufficient?

sobes.tech AI

Answer from AI

The default settings of the @Transactional annotation in Spring cover basic scenarios, but there are cases when they are insufficient:

  • Non-standard isolation levels: by default, DEFAULT is used, but sometimes a stricter isolation (e.g., REPEATABLE_READ or SERIALIZABLE) is needed.
  • Rollback management: by default, transactions are rolled back only on unchecked exceptions (RuntimeException and Error). If rollback on checked exceptions is required, it must be explicitly specified using rollbackFor.
  • Read-only transactions: for optimization, readOnly=true can be set.
  • Timeout settings: to limit the execution time of a transaction.
  • Transaction propagation: sometimes, the behavior of nested transactions needs to be changed (e.g., REQUIRES_NEW).

Example configuration:

@Transactional(
    isolation = Isolation.SERIALIZABLE,
    rollbackFor = {SQLException.class},
    readOnly = true,
    timeout = 5
)
public void someMethod() {
    // ...
}

Thus, default settings are insufficient when fine-tuning transaction behavior for specific business requirements.