Spring Transaction 指定事务管理器问题

一,单个数据源,单个事务管理器与@Transactional默认事务管理器名称不一致问题

在平时代码中使用声明性事务时,直接在方法上面加注解即可,如下

@Transactional(rollbackFor = Exception.class)

并没有指定事务管理器,为什么?

因为只有一个数据源,只有一个事物管理器。多数据源,多个事物管理器时才需要指定事务管理器

如下创建事物管理器

@Bean(name = "defaultTransactionManager")
@Primary
public DataSourceTransactionManager defaultDataSourceTransactionManager(@Qualifier("defaultDataSource") DataSource dataSource) {return new DataSourceTransactionManager(dataSource);
}

但是创建的事物管理器名称是 defaultTransactionManager 

@Transactional 注解中默认的事物器管理器是 transactionManager

为什么依然有效 

参考文章

千云物流- 多数据源事务管理_多数据源datasourcetransactionmanager-CSDN博客

SpringBoot手动开启事务:DataSourceTransactionManager-CSDN博客

【老王读Spring Transaction-7】一个数据源的事物管理配置 与 多数据源的事物管理配置_springboot 配置 @transactional 的数据源-CSDN博客

二,相关知识点

1,@Transactional注解不生效问题

常见情况:

1,方法内部调用:

一个类中,A方法调用加了事物注解的B方法;或A事物方法调用B事物方法,B事物依然不会生效

2,方法不是public

3,多数据源情况,事物管理器没有指定正确

4,@Transactional 注解属性 rollbackFor 设置错误

5,异常被catch了

6,自调用:事物方法A,内部调用的类中无事物方法B,如果B抛出异常,A方法其他内容不回滚

Spring @Transactional注解失效的情况及解决方法_@transactional注解不生效-CSDN博客

针对第六点方案有疑问

2,编程性事物 

为了解决大事物问题

3,SqlSessionFactory 创建

包含:如果是mybatisplus如何配置,如何指定xml路基

@Configuration
@MapperScan(basePackages = {"com.*","com.*"}, sqlSessionFactoryRef = "mallSqlSessionFactory")
public class DataBaseConfig {private static final Logger logger = LoggerFactory.getLogger(Constant.LOGGER);@Value("${spring.datasource.mall.druid.filters:stat}")private String filter;@Value("${spring.datasource.mall.druid.maxActive:20}")private int maxActive;@Value("${spring.datasource.mall.druid.minIdle:5}")private int minIdle;@Value("${spring.datasource.mall.druid.initialSize:5}")private int initialSize;@Value("${spring.datasource.mall.druid.maxWait:90000}")private int maxWait;@Value("${spring.datasource.mall.druid.timeBetweenEvictionRunsMillis:60000}")private int timeBetweenEvictionRunsMillis;@Value("${spring.datasource.mall.druid.minEvictableIdleTimeMillis:3000000}")private int minEvictableIdleTimeMillis;@Value("${spring.datasource.mall.druid.poolPreparedStatements:false}")private boolean poolPreparedStatements ;@Bean(name = "mallDataSource")@ConfigurationProperties(prefix = "spring.datasource.mall")public DataSource mallDataSource() {//指定使用DruidDataSourceDruidDataSource dataSource = (DruidDataSource) DataSourceBuilder.create().type(com.alibaba.druid.pool.DruidDataSource.class).build();try {dataSource.setInitialSize(initialSize);dataSource.setMinIdle(minIdle);dataSource.setMaxActive(maxActive);dataSource.setMaxWait(maxWait);dataSource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);dataSource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);dataSource.setPoolPreparedStatements(poolPreparedStatements);dataSource.setFilters(filter);logger.info("初始化mallDataSource Druid监控配置成功");}catch (Exception e){logger.warn("初始化Druid监控配置失败");}return dataSource;}@Bean(name = "mallSqlSessionFactory")public SqlSessionFactory mallSqlSessionFactory(@Qualifier("mallDataSource") DataSource dataSource)throws Exception {MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();//SqlSessionFactoryBean bean = new SqlSessionFactoryBean();bean.setDataSource(dataSource);Interceptor[] plugins =  new Interceptor[]{new PageHelper()};bean.setPlugins(plugins);List<String> mapperLocations = new ArrayList<>();mapperLocations.add("classpath:mybatis/mappers/customer/*.xml");mapperLocations.add("classpath:mybatis/mappers/community/*.xml");Resource[] resources = resolveMapperLocations(mapperLocations);bean.setMapperLocations(resources);return bean.getObject();}@Bean(name = "mallTransactionManager")public PlatformTransactionManager mallTransactionManager(@Qualifier("mallDataSource") DataSource dataSource) {return new DataSourceTransactionManager(dataSource);}@Bean(name = "mallSqlSessionTemplate")public SqlSessionTemplate mallSqlSessionTemplate(@Qualifier("mallSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {return new SqlSessionTemplate(sqlSessionFactory);}/*** 指定多路径*/private Resource[] resolveMapperLocations(List<String> mapperLocations) {ResourcePatternResolver resourceResolver = new PathMatchingResourcePatternResolver();List<Resource> resources = new ArrayList();if (mapperLocations != null) {for (String mapperLocation : mapperLocations) {try {Resource[] mappers = resourceResolver.getResources(mapperLocation);resources.addAll(Arrays.asList(mappers));} catch (IOException e) {throw new RuntimeException(e);}}}return resources.toArray(new Resource[0]);}
}

   @Bean(name = "defaultSqlSessionFactory")@Primarypublic SqlSessionFactory defaultSqlSessionFactory(@Qualifier("defaultDataSource") DataSource dataSource)throws Exception {MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();bean.setDataSource(dataSource);Interceptor[] plugins = {paginationInterceptor};bean.setPlugins(plugins);bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/*.xml"));GlobalConfig globalConfig = new GlobalConfig();globalConfig.setMetaObjectHandler(new MyMetaObjectHandler());bean.setGlobalConfig(globalConfig);return bean.getObject();}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/778983.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ESXi for ARM 1.15

官方文档页面已从 Flings 迁移到 ESXi-Arm Fling 1.15 Refresh - VMware Technology Network VMTN 下载地址为 https://customerconnect.vmware.com/downloads/get-download?downloadGroupESXI-ARM 需要VMware Customer Connect 账号登录。 更新如下&#xff1a; Changes …

探索直播美颜技术:计算机视觉在美颜SDK开发中的应用

下文&#xff0c;小编将深入探讨美颜技术在计算机视觉领域中的应用&#xff0c;特别是美颜SDK的开发过程&#xff0c;并剖析其技术原理和实现方法。 一、美颜技术的发展 这些算法往往难以满足用户对高质量美颜效果的需求&#xff0c;因此需要更加先进的技术手段来实现。 二、…

DM Mysql Oracle 日期函数 dameng

1. to_char 和 to_date 是oracle 和 DM 原生支持的日期函数 如下 YYYY-MM-DD HH24:MI:SS 纯大写纯小写都行 推荐使用 TO_CHAR 函数来格式化日期(而不推荐 DATE_FORMAT) SELECT to_char(SYSDATE, YYYY-MM-DD HH24:MI:SS) FROM dual;SELECT to_char(SYSDATE, yyyy-mm-dd h…

map与set容器常见操作详解(含示例代码及注意事项)

&#x1f389;个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名乐于分享在学习道路上收获的大二在校生 &#x1f648;个人主页&#x1f389;&#xff1a;GOTXX &#x1f43c;个人WeChat&#xff1a;ILXOXVJE &#x1f43c;本文由GOTXX原创&#xff0c;首发CSDN&…

LeetCode-热题100:73. 矩阵置零

题目描述 给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1&#xff1a; 输入&#xff1a; matrix [[1,1,1],[1,0,1],[1,1,1]] 输出&#xff1a; [[1,0,1],[0,0,0],[1,0,1]] 示例 2&…

企微侧边栏开发(内部应用内嵌H5)

一、背景 公司的业务需要用企业微信和客户进行沟通&#xff0c;而客户的个人信息基本都存储在内部CRM系统中&#xff0c;对于销售来说需要一边看企微&#xff0c;一边去内部CRM系统查询&#xff0c;比较麻烦&#xff0c;希望能在企微增加一个侧边栏展示客户的详细信息&#xf…

常见手撕项目C++

常见手撕项目C 设计模式单例模式饿汉模式懒汉模式 设计模式 单例模式 单例模式是一种常用的软件设计模式&#xff0c;其目的是确保一个类只有一个实例&#xff0c;并提供一个全局访问点来获取该实例。 优点&#xff1a; 资源控制&#xff1a;单例模式能够确保一个类只有一个实…

淘宝订单中的涉及红包检测、优惠券检测方案|工具|API

首先&#xff0c;检测订单红包的核心价值是什么&#xff1f; “红包的本质就是薅平台羊毛&#xff1a;不用怀疑&#xff0c;平台对于这种损害平台利益的行为肯定是最高等级的稽查”。那么&#xff0c;在日常运营中&#xff0c;需要尽可能过滤这类订单。 其次&#xff0c;如何使…

2024-03-28 问AI: 介绍一下AI 大神,Ian Goodfellow

文心一言 Ian Goodfellow是机器学习领域的知名学者&#xff0c;对深度学习领域有着重要贡献。他生于1985年&#xff0c;本科和硕士阶段就读于斯坦福大学&#xff0c;师从吴恩达。博士阶段&#xff0c;他跟随蒙特利尔大学的著名学者Yoshua Bengio研究机器学习&#xff0c;并在2…

SQL注入 (一)

一、sql注入的简介 将一段内容传入到目标网站&#xff0c;这段内容会被当做程序来执行 二、MySQL扩展补充 mysql的结构 库表名字段数据 mysql的用户 管理员&#xff1a;跨库、文件读写操作普通用户&#xff1a;猜解 判断目标网站的用户类别 白盒&#xff1a;读代码黑盒…

happybase基本操作方法

一、准备工作 &#xff08;1&#xff09;windows下安装happybase库&#xff1a; pip install happybase -i https://pypi.tuna.tsinghua.edu.cn/simple &#xff08;2&#xff09;确保HDFS、Hbase、Zookeeper服务正常运行&#xff1a; 启动HDFS命令&#xff1a;start-dfs.sh…

【数据结构 | 图论】如何用链式前向星存图(保姆级教程,详细图解+完整代码)

一、概述 链式前向星是一种用于存储图的数据结构&#xff0c;特别适合于存储稀疏图&#xff0c;它可以有效地存储图的边和节点信息&#xff0c;以及边的权重。 它的主要思想是将每个节点的所有出边存储在一起&#xff0c;通过数组的方式连接&#xff08;类似静态数组实现链表…

多线程实现Scheduler定时任务

在Spring框架中&#xff0c;Scheduled注解用于标记一个方法作为定时任务&#xff0c;它使用cron表达式来定义任务的执行频率。对于cron表达式定义的定时任务&#xff0c;如果上一个任务的执行还没有完成&#xff0c;下一个任务的执行行为取决于你使用的调度器&#xff08;sched…

C语言多服务器多播组网框架

使用技术: UDP ipv4 禁止本地回环 允许端口复用 超时等待 限制跳点 Echo 功能描述: 任意endpoint可主动发送多播,也可以收到信息后自动多播 前期准备: 开启操作系统多播广播功能,关闭系统防火墙,使用物理路由还需在路由开启广播多播功能 发送端和接收端运行不分先后 可无…

慧天【HTWATER】:水文水动力模型的革命性工具,城市内涝的精准解决方案

城市内涝水文水动力模型介绍 在城市排水防涝规划过程中&#xff0c;水文水动力耦合模型已经成为一种不可或缺的分析工具。在模型建立、城市内涝风险评估、排水系统性能诊断以及海绵城市规划等方面&#xff0c;内涝耦合模型提供了相应的模拟及分析工具&#xff1a; 1.1丰富的数…

Coding构建SSh登录教程

SSH 命令行 (Jenkins 原生) 持续集成中的 SSH 命令行插件通常用于授权构建机登录云服务器执行相应的命令与任务。通过 SSH 命令行插件&#xff0c;构建机可以针对云服务器执行以下操作&#xff1a; 将构建机上的文件推送到云主机&#xff1b; 将云主机上的文件拉取至构建机上&…

前端学习<二>CSS基础——09-CSS案例讲解:博雅互动

前言 CSS已经学了一些基础内容了&#xff0c;我们来讲解一个小案例吧。以博雅互动的官网首页举例。 版心 首页的版心如下&#xff1a; 这里我们要普及一个概念&#xff0c;叫“版心”。版心是页面中主要内容所在的区域。 比如说&#xff0c;网站左上角的logo&#xff0c;设计…

Flutter 开发学习笔记(0):环境配置

文章目录 前言开发需求环境配置运行出现问题我运行也是解决了很久的问题镜像源设置为清华的镜像源&#xff08;不知道有没有影响&#xff09;使用JDK21&#xff0c;JDK版本不能低于JDK11手动下载flutter 对应的gradle 运行成功&#xff01; 前言 我最近一直在用Uniapp写代码&a…

vmware,linux,centos7,NAT模式下的网络配置

centos7的NAT网络配置 NAT模式说明虚拟机网络配置工具本机配置net8网络&#xff08;NAT的网域&#xff09;本机的IP配置(用于net8局域网内解析主机IP和域名对应关系使用)&#xff08;可选&#xff09;虚拟机内的网络配置虚拟机ping不通www.baidu.com的情况下虚拟机ping可以ping…

ESP32 433mhz

从抖音抄了一大神的Arduino代码 # include <RCwitch.h> ///调用RC开关函数库 RCSwitch mySwitch RCSwitch(); //增加一个RC开关并设置名称 const int FRR 15; / 设置315MHz 无限模块的接受管脚 void setup(){Serial.begin(115200); //打开串口i设置波特率115200mySw…