Spring:多数据源配置多个事务管理器DEMO

Spring配置文件:

        配置2个事务管理器:txManager和txManager2

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx.xsd">  <context:component-scan base-package="xyz.jangle.service">  <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>  <context:exclude-filter type="annotation" expression="org.springframework.web.bind.annotation.ControllerAdvice"/>  </context:component-scan>  <!-- 配置数据源, 整合其他框架, 事务等. -->  <!-- 1. 数据源 : DriverManagerDataSource -->  <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">  <!-- tomcat连接池需要添加对应的jar包。 -->
<!--     <bean id="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource"> -->
<!--         <property name="driverClassName" value="com.mysql.jdbc.Driver" />   --><property name="driverClassName" value="com.mysql.cj.jdbc.Driver" />  <property name="url" value="jdbc:mysql://127.0.0.1:3306/jangle_test?characterEncoding=UTF8" />  <property name="username" value="root" />  <property name="password" value="111111" /> </bean>  <bean id="dataSource2" class="org.springframework.jdbc.datasource.DriverManagerDataSource">  <!-- tomcat连接池需要添加对应的jar包。 -->
<!--     <bean id="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource"> -->
<!--         <property name="driverClassName" value="com.mysql.jdbc.Driver" />   --><property name="driverClassName" value="com.mysql.cj.jdbc.Driver" />  <property name="url" value="jdbc:mysql://127.0.0.1:3306/jangle_test1?characterEncoding=UTF8" />  <property name="username" value="root" />  <property name="password" value="111111" /> </bean>  <!--  2. mybatis的SqlSession的工厂: SqlSessionFactoryBean dataSource:引用数据源  MyBatis定义数据源,同意加载配置  -->  <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">  <property name="dataSource" ref="dataSource"></property>  <property name="configLocation" value="classpath:mybatis-config.xml" />   <!-- 此处定义mapper映射文件,以通配符的形式定义整个包底下的所有mapper文件。 --><property name="mapperLocations" value="classpath:xyz/jangle/mapper/*.xml" /></bean><bean id="sqlSessionFactory2" class="org.mybatis.spring.SqlSessionFactoryBean">  <property name="dataSource" ref="dataSource2"></property>  <property name="configLocation" value="classpath:mybatis-config.xml" />   <!-- 此处定义mapper映射文件,以通配符的形式定义整个包底下的所有mapper文件。 --><property name="mapperLocations" value="classpath:xyz/jangle/mapper2/*.xml" /></bean><!--  3. mybatis自动扫描加载Sql映射文件/接口 : MapperScannerConfigurer sqlSessionFactory  basePackage:指定sql映射文件/接口所在的包(自动扫描)   (主要是接口,映射文件如果不在同一个包中,则在mybatis-config.xml等配置文件中配置)  -->  <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">  <property name="basePackage" value="xyz.jangle.dao"></property>  <property name="sqlSessionFactory" ref="sqlSessionFactory"></property>  </bean>  <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">  <property name="basePackage" value="xyz.jangle.dao2"></property>  <property name="sqlSessionFactory" ref="sqlSessionFactory2"></property>  </bean><!-- 4. 事务管理 : DataSourceTransactionManager dataSource:引用上面定义的数据源 -->  <bean id="txManager"  class="org.springframework.jdbc.datasource.DataSourceTransactionManager">  <property name="dataSource" ref="dataSource"></property>  </bean>  <bean id="txManager2"  class="org.springframework.jdbc.datasource.DataSourceTransactionManager">  <property name="dataSource" ref="dataSource2"></property>  </bean>  <!-- 5. 使用声明式事务  transaction-manager:引用上面定义的事务管理器  -->  <tx:annotation-driven transaction-manager="txManager" />  <!-- spring-mvc 附件功能需要配置的bean。  --><bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"><property name="maxUploadSize" value="50000000" /><!-- 单位b 最大附件50M --></bean></beans>  

使用:

        @Transactional(transactionManager="txManager2") 默认第一个事务管理器,第2个手动引用。

    @Override@Transactionalpublic Map<String, Object> insertOrUpdate(Demo record) {Map<String, Object> map = new HashMap<String, Object>();if(record.getId() == null) {demoMapper.insert(record);}else {demoMapper.updateByPrimaryKey(record);}
//		System.out.println(1/0);map.put("model", record);map.put("code", JConstant.SUCCESS_CODE);map.put("message", JConstant.SUCCESS_MESSAGE);return map;}
    @Override@Transactional(transactionManager="txManager2")public Map<String, Object> insertOrUpdate(Demo record) {Map<String, Object> map = new HashMap<String, Object>();if(record.getId() == null) {demoMapper2.insert(record);}else {demoMapper2.updateByPrimaryKey(record);}
//		System.out.println(1/0);	// 测试事务map.put("model", record);map.put("code", JConstant.SUCCESS_CODE);map.put("message", JConstant.SUCCESS_MESSAGE);return map;}

Mybatis:多数据源配置-CSDN博客

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

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

相关文章

通用 Excel 导出功能设计与实现:动态列选择与灵活配置

在企业级应用开发中&#xff0c;数据导出是高频需求。本文介绍一种支持动态列选择、灵活配置的通用 Excel 导出方案&#xff0c;通过前后端协同设计&#xff0c;实现导出字段、列顺序、数据格式的自定义&#xff0c;满足多样化业务场景。 一、功能架构设计 核心特性 动态字段…

安全壁垒 - K8s 的 RBAC、NetworkPolicy 与 SecurityContext 精要

安全壁垒 - K8s 的 RBAC、NetworkPolicy 与 SecurityContext 精要 如果说 Kubernetes 是我们构建云原生应用的“城市”,那么我们已经学会了如何规划道路(网络)、建设住宅(Pod 调度)、提供水电(存储)以及智能调节城市规模(自动伸缩)。现在,是时候为这座城市安装“城门…

服务器开放端口如何设置,本地内网开通应用端口让外网访问连接步骤

在互联网时代&#xff0c;服务器扮演着至关重要的角色&#xff0c;为了让本地搭建部署的服务器能够正常提供互联网服务&#xff0c;我们需要开放特定端口以供外部网络的客户端访问&#xff0c;本文将带领大家深入了解内网本地服务器如何设置端口开放给公网访问。 服务器开放端…

【深度学习新浪潮】什么是上下文工程?

什么是上下文工程? 上下文工程(Context Engineering) 是指通过设计、优化与大语言模型(LLM)交互时的输入内容(即“上下文”),引导模型生成更符合预期、更精准回答的系统性方法。这里的“上下文”通常包括 提示词(Prompt)、示例(Few-Shot Examples)、历史对话记录、…

Ansible ad-hoc模式常用三大模块“script、shell、command“应用笔记

script模块 - 外卖厨师 相当于你把做好的菜谱&#xff08;脚本文件&#xff09;分发给别人厨房执行 适合场景&#xff1a; ✓ 需要复杂菜谱&#xff08;多步骤脚本&#xff09; ✓ 保证每家分店味道一致&#xff08;环境标准化&#xff09; 示例&#xff1a;把《红烧肉制作指…

双重检查锁定实现的单例模式为什么需要volatile

今天介绍一下 单例模式(Singleton) 应用场景&#xff1a;配置管理类、数据库连接池、线程池 实现方式&#xff1a;双重检查锁定、静态内部类、枚举 public class ConfigManager {private static volatile ConfigManager instance;private ConfigManager() {}public static C…

Flink流水线+Gravitino+Paimon集成

1.数据源管理 1.1 添加Gravitino数据源 添加成功之后&#xff0c;会在Gravitino中创建一个名为配置的中的meatalake 1.2. 添加Paimon数据源 属性gravitinoId可以关联前面创建的Gravitino数据源&#xff0c;关联后&#xff0c;会在gravitino下创建一个该数据源的catalog。 2. …

关系代数详解与SQL示例

关系代数详解与SQL示例 关系代数是关系数据库的理论基础&#xff0c;它提供了一组操作符用于操作关系&#xff08;表&#xff09; 1. 基本操作 1.1 选择 (Selection, σ) 选择操作从关系中选择满足特定条件的元组&#xff08;行&#xff09;。 关系代数表示&#xff1a;σ条…

Android14音频子系统-Linux音频子系统ASoC-ALSA

文章目录 1、术语2、概述1&#xff09;资料快车 3、预备工作1&#xff09;codec - UDA1340 - 硬件规格2&#xff09;ASOC-ALSA代码重点目录介绍3&#xff09;ASOC-ALSA层级介绍4&#xff09;了解基本的软硬件架构 4、数据结构5、代码分析1&#xff09;Machine1、总体流程介绍2、…

零基础入门Java+大模型(持续更新)

0.初始一些常见的概念 AI&#xff1a;人工智能 大模型划分&#xff1a;&#xff08;本章了解一下这个就行&#xff09;NLP模型-->自然语言模型&#xff08;AI现在爆火的原因&#xff0c;就是自然语言模型这一块取得了很大的成就&#xff09;。 LLM&#xff1a;大语言模型…

数据库系统总结

数据库系统概述 数据库系统&#xff08;Database System, DBS&#xff09;是用于高效管理、存储和检索数据的软件系统。 数据库系统的组成包括&#xff1a;数据库、硬件、软件、人员。 三级模式-两级映像 内模式&#xff1a;管理如何存储物理的数据&#xff0c;对数据的存储…

2026-软件工程-《软件质量测试与保证》-期末复习—习题汇总

题量: 20 满分: 100 作答时间:06-04 17:30至06-22 23:59 智能分析 80分 一. 单选题&#xff08;共10题&#xff0c;50分&#xff09; (单选题)白盒测试设计测试用例的依据是( )。 A. 代码逻辑结构 B. 代码注释说明 C. 需求规格说明书 D. 用户使用场景 我的答案:A:代码逻辑结构…

量化面试绿皮书:35. 蒙蒂霍尔问题

文中内容仅限技术学习与代码实践参考&#xff0c;市场存在不确定性&#xff0c;技术分析需谨慎验证&#xff0c;不构成任何投资建议。 35. 蒙蒂霍尔问题 蒙提霍尔问题是一个基于美国老电视节目《让我们做个交易》的概率谜题&#xff0c;该问题以该节目的主持人命名。假设你现在…

如何防范 SQL 注入攻击以及SQL 注入防范技巧

在互联网高度发展的时代&#xff0c;网络安全问题日益突出&#xff0c;SQL 注入攻击成为众多网站和应用程序面临的严重威胁之一。本文将详细介绍如何防范 SQL 注入攻击&#xff0c;通过多个关键方面的详细阐述&#xff0c;帮助开发者和网站管理者构建更安全的网络环境&#xff…

k8s从入门到放弃之数据存储

k8s从入门到放弃之数据存储 在Kubernetes中&#xff0c;数据存储主要通过持久卷&#xff08;Persistent Volumes, PVs&#xff09;和持久卷声明&#xff08;Persistent Volume Claims, PVCs&#xff09;机制来实现。这种设计允许存储与计算分离&#xff0c;使得容器可以根据需…

用户体验驱动的3D设计:从功能实现到情感共鸣的设计升级

你有没有想过&#xff1a; 为什么有些产品看起来“平平无奇”&#xff0c;却能赢得用户喜爱&#xff1f;同样是3D建模&#xff0c;为什么有些人做的模型总让人觉得“有温度”&#xff1f;设计师只是关注功能和结构就够了吗&#xff1f;还是应该让作品“打动人心”&#xff1f;…

【图床配置记录】——pigo+gitee+typroa

记录一下安装的过程 基本上blog1可以解决 blog1 但是如果pigo上面没有gitee 或者下载gitee没啥反应 手动安装&#xff0c;在c:/用户/用户名/AppData/Roaming/picgo这个目录下,以管理员身份打开powershell&#xff08;或cmd&#xff1b; 文件——以管理员打开ps——输入npm in…

Python问题汇总(发个库存)

常见问题&#xff1a; 文章目录 IDE与1.如何注释2.python运行代码后没有输出&#xff0c;但无报错&#xff0c;有exit code 0标志3.导入txt文件&#xff0c;但是出现错误&#xff1a;UnicodeDecodeError: gbk codec cant decode byte 0x80 in position 205: illegal multibyte…

Java课后习题(编程题)

第一题&#xff1a; import java.util.Scanner;class Test {public static void main(String args[]) {Scanner scnew Scanner(System.in);System.out.println("请输入一个x值&#xff1a;");int xsc.nextInt();int y0;if(x>0){y3*x-1;}else if(x<0){y2*x-1;}e…

Spring--spring事务在什么情况下会失效,以及对应的解决方案

前言 一般失效是使用了Transaction注解的情况下&#xff0c;这篇博客就带你详解一下&#xff0c;哪些情况下注解会失效&#xff0c;在开发过程中要避免这些问题和可以及时发现这些问题&#xff0c;并且知道如何去规避和解决 一、Spring事务的基本原理 在深入了解事务失效的场…