当前位置: 首页 > news >正文

Spring Boot的事务管理实战(附源码 超详细)

 觉得有帮助请点赞关注收藏~~~

学过数据库课程的小伙伴们应该对事务比较熟悉,常见的有两阶段锁等等

从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注解处理事务

相关文章:

  • idea 如何不重启服务进行修改-(热部署)
  • 《你好,放大器》----学习记录(六)
  • mysql数据库之存储引擎
  • C++ STL中的allocator
  • GitHub提交代码超时解决方案 | 配置SSH连接
  • 火山引擎 RTC 全球化架构设计
  • 软考知识点---13语言处理程序基础
  • 生成keystore以及导出keystore公钥,私钥信息
  • 黑马学SpringCloud-Feign
  • 基于springboot的校园二手网站
  • 对于一个即将上线的网站,如何测试
  • 手把手教你搭建SpringCloudAlibaba之Nacos服务集群配置
  • 【数据分析】多重分形去趋势波动分析附matlab代码
  • Spring Cloud LoadBalancer--负载均衡的原理(源码分析)
  • Prometheus基础概念介绍
  • SegmentFault for Android 3.0 发布
  • 【跃迁之路】【585天】程序员高效学习方法论探索系列(实验阶段342-2018.09.13)...
  • 4个实用的微服务测试策略
  • Apache Zeppelin在Apache Trafodion上的可视化
  • CentOS 7 防火墙操作
  • JavaScript 奇技淫巧
  • MYSQL 的 IF 函数
  • PAT A1120
  • QQ浏览器x5内核的兼容性问题
  • quasar-framework cnodejs社区
  • SAP云平台里Global Account和Sub Account的关系
  • Selenium实战教程系列(二)---元素定位
  • tab.js分享及浏览器兼容性问题汇总
  • ubuntu 下nginx安装 并支持https协议
  • vue 个人积累(使用工具,组件)
  • Vue.js 移动端适配之 vw 解决方案
  • Vue组件定义
  • yii2中session跨域名的问题
  • 闭包,sync使用细节
  • 从setTimeout-setInterval看JS线程
  • 代理模式
  • 第2章 网络文档
  • 给github项目添加CI badge
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 每天10道Java面试题,跟我走,offer有!
  • 前端_面试
  • 前端面试总结(at, md)
  • 如何优雅地使用 Sublime Text
  • 3月27日云栖精选夜读 | 从 “城市大脑”实践,瞭望未来城市源起 ...
  • 阿里云移动端播放器高级功能介绍
  • #define与typedef区别
  • #QT项目实战(天气预报)
  • #宝哥教你#查看jquery绑定的事件函数
  • (11)工业界推荐系统-小红书推荐场景及内部实践【粗排三塔模型】
  • (8)Linux使用C语言读取proc/stat等cpu使用数据
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (rabbitmq的高级特性)消息可靠性
  • (附源码)springboot“微印象”在线打印预约系统 毕业设计 061642
  • (力扣)1314.矩阵区域和
  • (论文阅读笔记)Network planning with deep reinforcement learning