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.hqwc.cn/news/576966.html

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

相关文章

农学院智慧农业产教融合基地解决方案

第一章 背 景 1.1国际数字农业发展概况 随着全球信息化、智能化技术的快速发展&#xff0c;数字农业作为现代农业发展的重要方向&#xff0c;正日益受到国际社会的广泛关注。数字农业依托物联网、大数据、云计算、人工智能等现代信息技术&#xff0c;实现农业生产全过程的智能…

GTC 2024 火线评论:DPU 重构文件存储访问

编者按&#xff1a;英伟达2024 GTC 大会上周在美国加州召开&#xff0c;星辰天合 CTO 王豪迈在大会现场参与了 GPU 与存储相关的最新技术讨论&#xff0c;继上一篇《GTC 2024 火线评论&#xff1a;GPU 的高效存储利用》之后&#xff0c;这是他发回的第二篇评论文章。 上一篇文章…

ArcGIS矢量裁剪矢量

一、利用相交工具 Arctoolbox工具一分析工具一叠加分析一相交

第 6 章 ROS-Arbotix(自学二刷笔记)

重要参考&#xff1a; 课程链接:https://www.bilibili.com/video/BV1Ci4y1L7ZZ 讲义链接:Introduction Autolabor-ROS机器人入门课程《ROS理论与实践》零基础教程 6.5 Rviz中控制机器人模型运动 通过 URDF 结合 rviz 可以创建并显示机器人模型&#xff0c;不过&#xff0c;…

精彩回顾 | 同元软控受邀参加昇思人工智能框架峰会2024

3月22日&#xff0c;以“为智而昇 思创之源”为主题的昇思人工智能框架峰会2024在北京国家会议中心顺利召开&#xff0c;苏州同元软控信息技术有限公司&#xff08;简称“同元软控”&#xff09;受邀参加&#xff0c;并在峰会现场发布了基于MindSpore的MWORKS AI解决方案。总经…

如何在 MacOS 上安装 MySQL的详细教程

这里是在 macOS 上安装 MySQL 的详细教程&#xff0c;包括使用 Homebrew 进行安装、配置和启动 MySQL 服务的步骤&#xff0c;以及一些常用的管理操作和注意事项。请您耐心阅读&#xff0c;按照以下步骤逐步操作&#xff0c;以完成 MySQL 的安装和配置。 步骤一&#xff1a;安装…

解决PATH变量污染的问题

文章目录 解决PATH变量污染的问题概述笔记清空PATH变量之后的系统设置在命令行查看清空后的PATH变量以 gitea-1.17.1-gogit-windows-4.0-amd64.exe 为例以系统命令 where为例run_vs2019.bat备注 - 批处理的后缀最好是batEND 解决PATH变量污染的问题 概述 随着不断安装新软件,…

使用Kaggle API快速下载Kaggle数据集

前言 在使用Kaggle网站下载数据集时&#xff0c;直接在网页上点击下载可能会很慢&#xff0c;甚至会出现下载失败的情况。本文将介绍如何使用Kaggle API快速下载数据集。 具体步骤 安装Kaggle API包 在终端中输入以下命令来安装Kaggle API相关的包&#xff1a; pip install…

查询优化-提升子查询-UNION类型

瀚高数据库 目录 文档用途 详细信息 文档用途 剖析UNION类型子查询提升的条件和过程 详细信息 注&#xff1a;图片较大&#xff0c;可在浏览器新标签页打开。 SQL: SELECT * FROM score sc, LATERAL(SELECT * FROM student WHERE sno 1 UNION ALL SELECT * FROM student…

快速上手Spring Cloud 六:容器化与微服务化

快速上手Spring Cloud 一&#xff1a;Spring Cloud 简介 快速上手Spring Cloud 二&#xff1a;核心组件解析 快速上手Spring Cloud 三&#xff1a;API网关深入探索与实战应用 快速上手Spring Cloud 四&#xff1a;微服务治理与安全 快速上手Spring Cloud 五&#xff1a;Spring …

华为防火墙配置指引超详细(包含安全配置部分)以USG6320为例

华为防火墙USG6320 华为防火墙USG6320是一款高性能、高可靠的下一代防火墙,适用于中小型企业、分支机构等场景。该防火墙支持多种安全功能,可以有效抵御网络攻击,保护网络安全。 目录 华为防火墙USG6320 1. 初始配置 2. 安全策略配置 3. 防火墙功能配置 4. 高可用性配…

网站业务对接DDoS高防

准备需要接入的网站域名清单&#xff0c;包含网站的源站服务器IP&#xff08;仅支持公网IP的防护&#xff09;、端口信息等。所接入的网站域名必须已完成ICP备案。如果您的网站支持HTTPS协议访问&#xff0c;您需要准备相应的证书和私钥信息&#xff0c;一般包含格式为.crt的公…