When this annotation is declared at the class level, it applies as a default to all methods of the declaring class and its subclasses. Note that it does not apply to ancestor classes up the class hierarchy; inherited methods need to be locally redeclared in order to participate in a subclass-level annotation. For details on method visibility constraints, consult the Transaction Management section of the reference manual.
This annotation is generally directly comparable to Spring's
org.
class, and in fact AnnotationTransactionAttributeSource will directly
convert this annotation's attributes to properties in RuleBasedTransactionAttribute,
so that Spring's transaction support code does not have to know about annotations.
If no custom rollback rules are configured in this annotation, the transaction
will roll back on RuntimeException and Error but not on checked
exceptions.
Rollback rules determine if a transaction should be rolled back when a given
exception is thrown, and the rules are based on types or patterns. Custom
rules may be configured via rollbackFor/noRollbackFor and
rollbackForClassName/noRollbackForClassName, which allow
rules to be specified as types or patterns, respectively.
When a rollback rule is defined with an exception type, that type will be
used to match against the type of a thrown exception and its super types,
providing type safety and avoiding any unintentional matches that may occur
when using a pattern. For example, a value of
jakarta.servlet.ServletException.class will only match thrown exceptions
of type jakarta.servlet.ServletException and its subclasses.
When a rollback rule is defined with an exception pattern, the pattern can
be a fully qualified class name or a substring of a fully qualified class name
for an exception type (which must be a subclass of Throwable), with no
wildcard support at present. For example, a value of
"jakarta.servlet.ServletException" or "ServletException" will
match jakarta.servlet.ServletException and its subclasses.
Warning
You must carefully consider how specific a pattern
is and whether to include package information (which isn't mandatory). For example,
"Exception" will match nearly anything and will probably hide other
rules. "java.lang.Exception" would be correct if "Exception"
were meant to define a rule for all checked exceptions. With more unique
exception names such as "BaseBusinessException" there is likely no
need to use the fully qualified class name for the exception pattern. Furthermore,
rollback rules defined via patterns may result in unintentional matches for
similarly named exceptions and nested classes. This is due to the fact that a
thrown exception is considered to be a match for a given pattern-based rollback
rule if the name of thrown exception contains the exception pattern configured
for the rollback rule. For example, given a rule configured to match against
"com.example.CustomException", that rule will match against an exception
named com.example.CustomExceptionV2 (an exception in the same package as
CustomException but with an additional suffix) or an exception named
com.example.CustomException$AnotherException (an exception declared as
a nested class in CustomException).
For specific information about the semantics of other attributes in this
annotation, consult the org.
and org. javadocs.
This annotation commonly works with thread-bound transactions managed by a
org., exposing a
transaction to all data access operations within the current execution thread.
Note
This does NOT propagate to newly started threads within the method.
Alternatively, this annotation may demarcate a reactive transaction managed
by a org. which
uses the Reactor context instead of thread-local variables. As a consequence,
all participating data access operations need to execute within the same
Reactor context in the same reactive pipeline.
Note: When configured with a ReactiveTransactionManager, all
transaction-demarcated methods are expected to return a reactive pipeline.
Void methods or regular return types need to be associated with a regular
PlatformTransactionManager, e.g. through transactionManager().
org.springframework.transaction.interceptor.TransactionAttribute , org.springframework.transaction.interceptor.DefaultTransactionAttribute , org.springframework.transaction.interceptor.RuleBasedTransactionAttribute
| Modifier and Type | Method and Description |
|---|---|
| public Isolation | |
| public String[] | |
| public Class | noRollbackFor()
Defines zero (0) or more exception |
| public String[] | noRollbackForClassName()
Defines zero (0) or more exception name patterns (for exceptions which must be a
subclass of |
| public Propagation | |
| public boolean | readOnly()
A boolean flag that can be set to |
| public Class | rollbackFor()
Defines zero (0) or more exception types, which must be
subclasses of |
| public String[] | rollbackForClassName()
Defines zero (0) or more exception name patterns (for exceptions which must be a
subclass of |
| public int | |
| public String | Returns: the timeout in seconds as a String value, e.g. a placeholderThe timeout for this transaction (in seconds). |
| public String | |
| public String |
| isolation | back to summary |
|---|---|
| public Isolation isolation() The transaction isolation level. Defaults to Exclusively designed for use with | |
| label | back to summary |
|---|---|
| public String[] label() Defines zero (0) or more transaction labels. Labels may be used to describe a transaction, and they can be evaluated by individual transaction managers. Labels may serve a solely descriptive purpose or map to pre-defined transaction manager-specific options. See the documentation of the actual transaction manager implementation for details on how it evaluates transaction labels. | |
| noRollbackFor | back to summary |
|---|---|
| public Class Defines zero (0) or more exception This is the preferred way to construct a rollback rule (in contrast to
| |
| noRollbackForClassName | back to summary |
|---|---|
| public String[] noRollbackForClassName() Defines zero (0) or more exception name patterns (for exceptions which must be a
subclass of See the class-level javadocs for further details on rollback rule semantics, patterns, and warnings regarding possible unintentional matches. | |
| propagation | back to summary |
|---|---|
| public Propagation propagation() The transaction propagation type. Defaults to | |
| readOnly | back to summary |
|---|---|
| public boolean readOnly() A boolean flag that can be set to Defaults to This just serves as a hint for the actual transaction subsystem; it will not necessarily cause failure of write access attempts. A transaction manager which cannot interpret the read-only hint will not throw an exception when asked for a read-only transaction but rather silently ignore the hint. | |
| rollbackFor | back to summary |
|---|---|
| public Class Defines zero (0) or more exception types, which must be
subclasses of By default, a transaction will be rolled back on This is the preferred way to construct a rollback rule (in contrast to
| |
| rollbackForClassName | back to summary |
|---|---|
| public String[] rollbackForClassName() Defines zero (0) or more exception name patterns (for exceptions which must be a
subclass of See the class-level javadocs for further details on rollback rule semantics, patterns, and warnings regarding possible unintentional matches. | |
| timeout | back to summary |
|---|---|
| public int timeout() The timeout for this transaction (in seconds). Defaults to the default timeout of the underlying transaction system. Exclusively designed for use with
| |
| timeoutString | back to summary |
|---|---|
| public String timeoutString() The timeout for this transaction (in seconds). Defaults to the default timeout of the underlying transaction system. Exclusively designed for use with
| |
| transactionManager | back to summary |
|---|---|
| public String transactionManager() A qualifier value for the specified transaction. May be used to determine the target transaction manager, matching the
qualifier value (or the bean name) of a specific
| |
| value | back to summary |
|---|---|
| public String value() Alias for
| |