spring - transaction - Anotación transaccional en toda la clase+excluyendo un solo método
spring mvc example (1)
Tengo una clase con @Transactional
anotación @Transactional
(en lugar de marcarla para todos sus métodos).
Aunque tengo un solo método dentro de esa clase que no debería ser anotado como @Transactional
.
Mi pregunta es: ¿hay una anotación que pueda poner en este método para marcarla como "no transaccional"? o debo comenzar a marcar cada método individual en esta clase como "transaccional" excluyendo este método (mucho trabajo)
Gracias.
Existen diferentes estrategias de propagación de transacciones a utilizar. Estos existen en la Propagation
la enumeración. Los que podrías querer usar son
/**
* Execute non-transactionally, suspend the current transaction if one exists.
* Analogous to EJB transaction attribute of the same name.
* <p>Note: Actual transaction suspension will not work on out-of-the-box
* on all transaction managers. This in particular applies to JtaTransactionManager,
* which requires the {@code javax.transaction.TransactionManager} to be
* made available it to it (which is server-specific in standard J2EE).
* @see org.springframework.transaction.jta.JtaTransactionManager#setTransactionManager
*/
NOT_SUPPORTED(TransactionDefinition.PROPAGATION_NOT_SUPPORTED),
/**
* Execute non-transactionally, throw an exception if a transaction exists.
* Analogous to EJB transaction attribute of the same name.
*/
NEVER(TransactionDefinition.PROPAGATION_NEVER), // maybe not this one
Así que anota el método dentro de tu clase con cualquiera de estos.
@Transactional
public class MyTransactionalClass {
@Transactional(propagation = Propagation.NOT_SUPPORTED)
public void nonTransactionalMethod() {...}
}
Puedes encontrar todas las estrategias de propagación here .