关于Spring Boot 多数据源的事务管理
自己的一些理解:自从用了Spring Boot 以来,这近乎零配置和“约定大于配置”的设计范式用着确实爽,其实对零配置的理解是:应该说可以是零配置可以跑一个简单的项目,因为Spring Boot 有默认的配置,当默认的配置满足不了你的时候,这时候所谓的零配置只是换了一种方式而已,我们都知道程序员最擅长的就是写代码,相比来说xml文件还是有点蛋疼的; 行啊,Spring Boot说你不是擅长写代码,那我就把配置给你转换为写代码的形式,所以你会发现在Spring Boot 中使用@Configuration 、@SpringBootApplication 、@Bean 来通过将一个配置类标记为配置类进行SessionFactory 等的配置,再配合DataSource 就可以不用xml进行配置。
使用Spring Boot 半年以来,基础的使用掌握的是没啥问题了,一般的异常也拦不住了,但是稍微深一些的还是自己碰到了为难了才会记忆深刻,理解好一些。 比如 多数据源的事务、分布式的事务管理。 这时候就得用点心了。
下面先对Spring Boot 单数据源情况进行简单的介绍。先看下图

Spring Boot本身并不管理事务,只是提供了 PlatformTransactionManager 接口来供持久层实现来达到事务的管理,Spring Boot 默认使用JDBC来控制事务。
在单数据源的情况下我们无需自己管理事务,Spring Boot 默认使用DataSourceTransactionManager 来管理事务,我们所做的只要在程序的service层加上 @Transactional 注解即可使用,这种方式只是适用于单数据源的情况下,但是多数情况下我们都不会只有一个数据源,那么这时候就需要做些工作才能使事务正确的工作了。
第一步:首先我们要为每个数据源创建并指定要使用的事务管理器。也即是在spring boot 的数据源配置类中如下
1 @Bean(name = "entityTx")
2 public DataSourceTransactionManager transactionManager(@Qualifier("entityDataSource") DataSource dataSource) {
3 return new DataSourceTransactionManager(dataSource);
4 }
这里是使用jdbc的事务管理器,将名称为entityDataSource 的数据源通过方法参数通过构造器交给jdbc事务管理器管理。 这里只是一个数据源的示例,分别在另外的数据源中做相同配置,只是注意@Bean 注解的name 值不能一样,方法参数注入的数据源作区别即可。
之后在service层加上 @Transactional的 transactionManager属性或者value属性 指定为对应的事务管理器名称即可,也即是@Bean的naem的值,在@Transactional 注解中 transactionManager 属性和value 属性互为别名。
这样做针对操作同一个数据库用户下的表具备了事务,但是如果需要将不同数据源的操作纳为一个事务中,就需要另外的思路了,因为 DataSourceTransactionManager 事务管理器是不具备这个功能的。这就需要转到我的下一篇文文章,分布式事务管理
链接:https://www.cnblogs.com/qiaoyutao/p/11551045.html
关于Spring Boot 多数据源的事务管理的更多相关文章
- spring boot配置mybatis和事务管理
spring boot配置mybatis和事务管理 一.spring boot与mybatis的配置 1.首先,spring boot 配置mybatis需要的全部依赖如下: <!-- Spri ...
- spring boot快速入门 5: 事务管理
事务管理: 新增两名女生: 第一步:创建 GirlRespository package com.payease.service; import com.payease.entity.Girl; im ...
- (43). Spring Boot动态数据源(多数据源自动切换)【从零开始学Spring Boot】
在上一篇我们介绍了多数据源,但是我们会发现在实际中我们很少直接获取数据源对象进行操作,我们常用的是jdbcTemplate或者是jpa进行操作数据库.那么这一节我们将要介绍怎么进行多数据源动态切换.添 ...
- 事务隔离级别与传播机制,spring+mybatis+atomikos实现分布式事务管理
1.事务的定义:事务是指多个操作单元组成的合集,多个单元操作是整体不可分割的,要么都操作不成功,要么都成功.其必须遵循四个原则(ACID). 原子性(Atomicity):即事务是不可分割的最小工作单 ...
- Spring事务隔离级别与传播机制详解,spring+mybatis+atomikos实现分布式事务管理
原创说明:本文为本人原创作品,绝非他处转载,转账请注明出处 1.事务的定义:事务是指多个操作单元组成的合集,多个单元操作是整体不可分割的,要么都操作不成功,要么都成功.其必须遵循四个原则(ACID). ...
- Spring+JTA+Atomikos+mybatis分布式事务管理
我们平时的工作中用到的Spring事务管理是管理一个数据源的.但是如果对多个数据源进行事务管理该怎么办呢?我们可以用JTA和Atomikos结合Spring来实现一个分布式事务管理的功能.了解JTA可 ...
- Spring 简单而强大的事务管理功能
开始之前 关于本教程 本教程将深入讲解 Spring 简单而强大的事务管理功能,包括编程式事务和声明式事务.通过对本教程的学习,您将能够理解 Spring 事务管理的本质,并灵活运用之. 先决条件 本 ...
- Spring Boot多数据源配置(二)MongoDB
在Spring Boot多数据源配置(一)durid.mysql.jpa 整合中已经讲过了Spring Boot如何配置mysql多数据源.本篇文章讲一下Spring Boot如何配置mongoDB多 ...
- 【Spring Boot】利用 Spring Boot Admin 进行项目监控管理
利用 Spring Boot Admin 进行项目监控管理 一.Spring Boot Admin 是什么 Spring Boot Admin (SBA) 是一个社区开源项目,用于管理和监视 Spri ...
随机推荐
- MySQL注入 利用系统读、写文件
目录 能读写文件的前提 Windows下的设置 Linux下的设置 没有读写权限的尝试 有SQL注入点,确认是否有读写权限 read load_file() load data infile() wr ...
- k8s自定义controller设计与实现
k8s自定义controller设计与实现 创建CRD 登录可以执行kubectl命令的机器,创建student.yaml apiVersion: apiextensions.k8s.io/v1bet ...
- vue封装一个弹框组件
这是一个提示框和对话框,例: 这是一个组件 eject.vue <template> <div class='kz-cont' v-show='showstate'> &l ...
- 剑指 Offer 63. 股票的最大利润 + 动态规划
剑指 Offer 63. 股票的最大利润 Offer_63 题目描述 方法一:暴力法 package com.walegarrett.offer; /** * @Author WaleGarrett ...
- python flask框架详解
Flask是一个Python编写的Web 微框架,让我们可以使用Python语言快速实现一个网站或Web服务.本文参考自Flask官方文档, 英文不好的同学也可以参考中文文档 1.安装flask pi ...
- php-fpm的慢执行日志
通过慢执行日志,我们可以清晰地了解PHP脚本在哪里执行时间长,可以定位到行 下面介绍如何开启和查看慢执行日志 #vim /usr/local/php-fpm/etc/php-fpm.d/www.con ...
- C语言入门-mingw64安装+配置
OK,大家好,结合上期所说,本期让我们来配置编译器吧! 首先先下载mingw64离线包,官网下载慢,可以去群里下载,*.7z格式(有些同学可能没有解压软件,为了照顾这部分同学,笔者提供*.exe格式的 ...
- P4847 银河英雄传说V2 题解(Splay)
题目链接 P4847 银河英雄传说V2 解题思路 我天哪!!!\(splay\)在\(rotate\)的时候先\(upd(y)\)再\(upd(x)\)!!以后不能再因为这个\(WA\)一晚上了!!! ...
- wireshark如何抓取分析https的加密报文
[问题概述] https流量基于ssl/tls加密,无法直接对报文进行分析. [解决方案] 方案1 -- 利用"中间人攻击"的代理方式抓包分析.整个方案过程比较简单,这里不赘述,大 ...
- Oracle dg下掉一个从库
1.在数据库中查找要下线的从库 SQL> show parameter log_archive_dest NAME TYPE VALUE----------------------------- ...