spring-boot - example - spring transaction propagation
@EnableTransactionManagement en Spring Boot (3)
De acuerdo con> https://spring.io/guides/gs/managing-transactions/
Spring Boot detectará spring-jdbc en el classpath y h2 y creará un DataSource y un JdbcTemplate automáticamente . Debido a que dicha infraestructura ya está disponible y no tiene una configuración dedicada, también se creará un DataSourceTransactionManager para usted : este es el componente que intercepta el método anotado @Transactional.
También puede usar el activador de arranque de arranque para enumerar sus beans creados en su contexto y lo encontrará
bean ":" transactionManager "
¿Se requiere @EnableTransactionManagement en Spring Boot? Hice algunas investigaciones. Algunas personas dicen que no lo necesita, ya que Spring Boot ya lo tiene habilitado, otros dicen que tiene que usarlo explícitamente. ¿Entonces, cómo es eso?
Poco viejo post pero las respuestas dadas anteriormente no son sencillas cuando lo estaba buscando.
@EnableTransactionManagement
es opcional en Spring boot, siempre que spring-data * o spring-tx se encuentren en classpath. ¿Cómo funciona? Como a continuación:
Spring Boot agrega un spring-boot-autoconfigure.jar en la ruta de clase. Vaya al archivo spring.factories del META-INF y podrá ver la entrada org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration
allí. Esto inicializa la configuración automática de la transacción para usted.
Tenga en cuenta que la clase tiene las siguientes líneas: (fragmento)
@Configuration
@ConditionalOnClass({PlatformTransactionManager.class})
@AutoConfigureAfter({JtaAutoConfiguration.class, HibernateJpaAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class, Neo4jDataAutoConfiguration.class})
@EnableConfigurationProperties({TransactionProperties.class})
public class TransactionAutoConfiguration {
..
}
Eche un vistazo a TransactionAutoConfiguration
para ver si habilita el soporte de TransactionAutoConfiguration
si PlatformTransactionManager
está disponible en classpath. EnableTransactionManagementConfiguration
también se configura allí.
Probablemente también estés usando Spring Data. Las llamadas a los repositorios de Spring Data están rodeadas de forma predeterminada por una transacción, incluso sin @EnableTransactionManagement. Si Spring Data encuentra una transacción existente, la transacción existente se reutilizará, de lo contrario se creará una nueva transacción.
Sin embargo, las anotaciones de @Transactional dentro de su propio código solo se evalúan cuando tiene activado @EnableTransactionManagement (o configurado la gestión de transacciones de otra manera).
Puede rastrear fácilmente el comportamiento de la transacción agregando la siguiente propiedad a su application.properties:
logging.level.org.springframework.transaction.interceptor=TRACE