弹簧启动@Transactional无需启用事务管理

时间:2016-10-14 14:51:31

标签: spring spring-boot spring-transactions

在我的春季启动应用程序中,Spring @Transactional注释无需明确指定@EnableTransactionManagement即可运行。

是否有任何官方文档说它是自动启用的?

或者还有其他事情发生了......?

btw:我正在使用Spring Data JPA

3 个答案:

答案 0 :(得分:4)

是的,只要您的应用程序中有spring-tx和某些事务资源,就会启用此功能。有效地,如果您使用spring-boot-starter-jdbcspring-boot-starter-data-jpa,Spring Boot将为您配置DataSource,启动Hibernate(在后一种情况下)并配置事务管理。

并非所有“Enable”注释都需要明确设置。当有合理数量的东西我们可以检查以验证时,为您配置它是有意义的,我们会这样做。在这种情况下,如果您有DataSource,则必须要进行交易。如果您有JPA(并且没有JTA基础结构),您可能需要JpaTransactionManager)。如果我们自动配置它,最简单的方法是通过@Transactional,所以我们也会在那种情况下启用它。

我猜你一直要求获得某种“官方”答案,所以这里就是一个。

答案 1 :(得分:0)

如果“< tx:annotation-driven />”,

@Transactional注释可以正常工作标签位于Spring XML配置中。请看这个参考:http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/transaction/annotation/EnableTransactionManagement.html

答案 2 :(得分:0)

@SpringBootApplication 添加 @EnableAutoConfiguration ,它会在您的类路径中检测到 Spring Data JPA 。根据它,Spring注册PlatformTransactionManager - JpaTransactionManager ,datasource,entitymanager,repositories。

不确定是否有精确的文章,但堆栈上有适当的answer。官方春季样本article