觉得有帮助请点赞关注收藏~~~
学过数据库课程的小伙伴们应该对事务比较熟悉,常见的有两阶段锁等等
从org.springframework.data.jpa.repository.support.SimpleJpaRepository的源代码中可以看出,Spring Data JPA对所有的默认接口方法都开启了事务支持,并且对查询类事务默认启用只读权限(read only)
在Spring Boot中 自动配置了事务管理器 并自动开启了注解事务的支持
1:自动配置的事务管理器
在使用JDBC访问数据库使,Spring Boot定义了DataSourceTransactionManager的Bean,具体配置见org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration类中的定义
@Bean @ConditionalOnMissBean(PlatformTransactionManager.class) public DataSourceTransactionManager transactionManager(DataSourceProperties properties) { DataSourceTransactionManager transactionManager=new DataSourceTransactionManager(this.dataSource); if(this.transactionManagerCustomizers!=null) { this.transactionManagerCustomizers.customize(transactionManager);; } return transactionManager; }
在使用JPA访问数据库时,Spring Boot定义了PlatformTransactionManager的实现JpaTransactionManager的Bean 定义如下
@Bean @ConditionalOnMissBean public PlatformTransactionManager transactionManager() { JpaTransactionManager transactionManager=new JpaTransactionManager(); if(this.transactionManagerCustomizers!=null) { this.transactionManagerCustomizers.customize(transactionManager);; } return transactionManager; }
2:自动开启注解事务的支持
Spring Boot使用org.springframework.boot.autoconfigure.transaction.Transaction-AutoConfiguration类配置事务的支持,并在该类中自动开启注解事务的支持 代码如下
@Configuration @ConditionalOnBean(PlatformTransactionManager.class) @ConditionalOnMissingBean(AbstracTransactionManagementConfiguration.class) public static class EnableTransactionManagementConfiguration{ }
不过自动启用该自动注解有两个前提条件,但是一般情况下这两个条件都是满足的 所以在启动类上写不写这两个注解都可以开启事务的支持,然后使用@Transactional注解处理事务