没有合适的资源?快使用搜索试试~ 我知道了~
首页浅谈SpringBoot之事务处理机制
浅谈SpringBoot之事务处理机制
895 浏览量
更新于2023-05-29
评论
收藏 160KB PDF 举报
主要介绍了浅谈SpringBoot之事务处理机制,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
资源详情
资源评论
资源推荐

浅谈浅谈SpringBoot之事务处理机制之事务处理机制
主要介绍了浅谈SpringBoot之事务处理机制,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
一、一、Spring的事务机制的事务机制
所有的数据访问技术都有事务处理机制,这些技术提供了API用来开启事务、提交事务来完成数据操作,或者在发生错误的时候回滚数据。
而Spring的事务机制是用统一的机制来处理不同数据访问技术的事务处理。Spring的事务机制提供了一个PlatformTransactionManager接口,不同的数据访
问技术的事务使用不同的接口实现:
在程序中定义事务管理器的代码如下:
@Bean
public PlatformTransactionManager transactionManager() {
JpaTransactionManager transactionManager = new JpaTransactionManager();
transactionManager.setDataSource(dataSource());
return transactionManager;
}
二、声明式事务二、声明式事务
Spring支持声明式事务,即使用注解来选择需要使用事务的方法,它使用@Transactional注解在方法上表明该方法需要事务支持。
@Transactional
public void saveSomething(Long id, String name) {
//数据库操作
}
在此处需要特别注意的是,此@Transactional注解来自org.springframework.transaction.annotation包,而不是javax.transaction。
Spring提供了一个@EnableTransactionManagement注解在配置类上来开启声明式事务的支持。使用了@EnableTransactionManagement后,Spring容器会
自动扫描注解@Transactional的方法和类。@EnableTransactionManagement的使用方式如下:
@Configuration
@EnableTransactionManagement
public class AppConfig {
}
三、类级别使用三、类级别使用@Transactional
@Transactional不仅可以注解在方法上,也可以注解在类上。当注解在类上的时候意味着此类的所有public方法都是开启事务的。如果类级别和方法级别同
时使用了@Transactional注解,则使用在类级别的注解会重载方法级别的注解。
四、四、Spring Data JPA的事务支持的事务支持
Spring Data JPA对所有的默认方法都开启了事务支持,且查询类事务默认启用readOnly=true属性。
这个从源码SimpleJpaRepository中可以看出,SimpleJpaRepository在类级别定义了@Transactional(readOnly=true),而在和save、delete相关的操作重
写了@Transactional属性,此时readOnly属性是false,其余查询操作readOnly仍然为false。
五、五、Spring Boot的事务支持的事务支持
1.自动配置的事务管理器
在使用JDBC作为数据访问技术的时候,SpringBoot为我们定义了PlatformTransactionManager的实现DataSourceTransactionManager的Bean;配置见
org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration类中的定义:
@Bean
@ConditionalOnMissingBean
@ConditionalOnBean(DataSource.class)
public PlatformTransactionManager transactionManager() {
return new DataSourceTransactionManager(this.dataSource);
}
在使用JPA作为数据访问技术的时候,Spring Boot为我们了定义一个PlatformTransactionManager的实现JpaTransactionManager的Bean;配置见
org.springframework.boot.autoconfigure.orm.jpa.JpaBaseConfiguration.class类中的定义:
@Bean
@ConditionalOnMissingBean(PlatformTransactionManager.class)
public PlatformTransactionManager transactionManager() {
return new JpaTransactionManager();
}
2.自动开启注解事务的支持
Spring Boot专门用于配置事务的类为:org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration,此配置类依赖于
JpaBaseConfiguration和DataSourceTransactionManagerAutoConfiguration。
而在DataSourceTransactionManagerAutoConfiguration配置里还开启了对声明式事务的支持,代码如下:










安全验证
文档复制为VIP权益,开通VIP直接复制

评论0