直接上代码:

pom:

<!--JTA组件核心依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jta-atomikos</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>2.3</version>
</dependency>

<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>3.1.0</version>
</dependency>

<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>

config:

@Configuration
@MapperScan(basePackages = {"com.bs.dao.iadquery"},sqlSessionTemplateRef = "iadquerySqlSessionTemplate")
public class DruidIadqueryConfig {

@Autowired
private IadqueryConfig iadqueryConfig;

@Bean("dataSourceTwo")
public DataSource dataSourceOne () throws SQLException {
// 设置数据库连接
// MysqlXADataSource mysqlXADataSource = new MysqlXADataSource();
OracleXADataSource oracleXADataSource = new OracleXADataSource();
oracleXADataSource.setURL(iadqueryConfig.getUrl());
oracleXADataSource.setUser(iadqueryConfig.getUsername());
oracleXADataSource.setPassword(iadqueryConfig.getPassword());
oracleXADataSource.setDriverType(iadqueryConfig.getDriverClassName());
// 事务管理器
AtomikosDataSourceBean atomikosDataSourceBean = new AtomikosDataSourceBean();
atomikosDataSourceBean.setXaDataSource(oracleXADataSource);
atomikosDataSourceBean.setUniqueResourceName("dataSourceTwo");
return atomikosDataSourceBean;
}

@Bean(name = "sqlSessionFactoryTwo")
public SqlSessionFactory sqlSessionFactoryOne(
@Qualifier("dataSourceTwo") DataSource dataSourceOne) throws Exception{
// 配置Session工厂
// SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
MybatisSqlSessionFactoryBean sessionFactory = new MybatisSqlSessionFactoryBean();
sessionFactory.setDataSource(dataSourceOne);
return sessionFactory.getObject();
}
@Bean(name = "iadquerySqlSessionTemplate")
public SqlSessionTemplate sqlSessionTemplate(
@Qualifier("sqlSessionFactoryTwo") SqlSessionFactory sqlSessionFactory) {
// 配置Session模板
return new SqlSessionTemplate(sqlSessionFactory);
}
}

@Configuration
@MapperScan(basePackages = {"com.bs.dao.master"},sqlSessionTemplateRef = "masterSqlSessionTemplate")
public class DruidMasterConfig {

@Autowired
private MasterConfig masterConfig ;

@Primary //
@Bean("dataSourceOne")
public DataSource dataSourceOne () throws SQLException {
// 设置数据库连接
// MysqlXADataSource mysqlXADataSource = new MysqlXADataSource();
OracleXADataSource oracleXADataSource = new OracleXADataSource();
oracleXADataSource.setURL(masterConfig.getUrl());
oracleXADataSource.setUser(masterConfig.getUsername());
oracleXADataSource.setPassword(masterConfig.getPassword());
oracleXADataSource.setDriverType(masterConfig.getDriverClassName());
// 事务管理器
AtomikosDataSourceBean atomikosDataSourceBean = new AtomikosDataSourceBean();
atomikosDataSourceBean.setXaDataSource(oracleXADataSource);
atomikosDataSourceBean.setUniqueResourceName("dataSourceOne");
return atomikosDataSourceBean;
}
@Primary
@Bean(name = "sqlSessionFactoryOne")
public SqlSessionFactory sqlSessionFactoryOne(
@Qualifier("dataSourceOne") DataSource dataSourceOne) throws Exception{
// 配置Session工厂
// SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
MybatisSqlSessionFactoryBean sessionFactory = new MybatisSqlSessionFactoryBean();
sessionFactory.setDataSource(dataSourceOne);
return sessionFactory.getObject();
}
@Primary
@Bean(name = "masterSqlSessionTemplate")
public SqlSessionTemplate sqlSessionTemplate(
@Qualifier("sqlSessionFactoryOne") SqlSessionFactory sqlSessionFactory) {
// 配置Session模板
return new SqlSessionTemplate(sqlSessionFactory);
}
}

@Configuration
@Data
@ConfigurationProperties(prefix = "spring.datasource.dynamic.datasource.iadquery")
public class IadqueryConfig {
private String url;
private String username;
private String password;
private String driverClassName;
}

@Configuration
@Data
@ConfigurationProperties(prefix = "spring.datasource.dynamic.datasource.master")
public class MasterConfig {
private String url;
private String username;
private String password;
private String driverClassName;
}

yml:

pring:
jta:
transaction-manager-id: jtaManager
main:
allow-bean-definition-overriding: true
autoconfigure:
exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure
datasource:
type: com.alibaba.druid.pool.DruidDataSource
dynamic:
druid: #以下是全局默认值,可以全局更改
#监控统计拦截的filters
filters: stat,wall
#配置初始化大小/最小/最大
initial-size: 1
min-idle: 1
max-active: 20
datasource:
master:
url: jdbc:oracle:thin:@10.22.32.17:1521/midtdb
username: esi_comm
password: esi_test_2022
driverClassName: oracle.jdbc.driver.OracleDriver
iadquery:
url: jdbc:oracle:thin:@10.22.13.71:1521/yaetdb
username: iadsmpm_query
password: iadsmpm_query_test2022
driverClassName: oracle.jdbc.driver.OracleDriver

mybatis-puls解决多数据源事务的问题的更多相关文章

  1. mybatis配置多个数据源事务(Transaction)处理

    当mybatis配置文件中只有一个数据源的时候,按照正常的事务注解形式@Transaction是没有问题的,但是当配置文件中有多个数据源的时候发现事务不起作用了,怎么解决这个问题呢?看下面的案例:

  2. spring+mybatis管理多个数据源(非分布式事务)

    本文通过一个demo,介绍如何使用spring+mybatis管理多个数据源,注意,本文的事务管理并非之前博文介绍的分布式事务. 这个demo将使用两个事务管理器分别管理两个数据源.对于每一个独立的事 ...

  3. spring+springmvc+mybatis+oracle+atomikos+jta实现多数据源事务管理

    ---恢复内容开始---   在做项目过程中,遇到了需要一个项目中访问两个数据库的情况,发现使用常规的spring管理事务,导致事务不能正常回滚,因此,采用了jta+atomikos的分布式数据源方式 ...

  4. spring+atomikos+mybatis 多数据源事务(动态切换)

    注:自动切换,是为不同的数据源,却要对应相同的dao层: 1.与无事务版的一样,创建DynamicDataSource类,继承AbstractRoutingDataSource package com ...

  5. 2019-04-09 SpringBoot+Druid+MyBatis+Atomikos 的多数据源配置

    前面部分是网上找的,我按照网上写的把自己搭建的过程展示一次 1.引入依赖 目前项目本来使用到了Mybatis plus(在自己的Mapper接口中继承BaseMapper获得基本的CRUD,而不需要增 ...

  6. springbootdruidmybatismysql多数据源事务管理

    springboot+druid+mybatis+mysql+多数据源事务管理 分布式事务在java中的解决方案就是JTA(即Java Transaction API):springboot官方提供了 ...

  7. spring + myBatis 常见错误:注解事务不回滚

    最近项目在用springMVC+spring+myBatis框架,在配置事务的时候发现一个事务不能回滚的问题. 刚开始配置如下:springMVC.xml配置内容: spring.xml配置内容 从上 ...

  8. 使用spring+mybatis+atomikos+tomcat构建分布式事务

    本文通过一个demo,介绍如何使用spring+mybatis+atomikos+tomcat构建在一个事务中涉及两个数据源的web应用. demo功能:实现一个能成功提交和回滚的涉及两个数据库数据源 ...

  9. mybatis源码解读(四)——事务的配置

    上一篇博客我们介绍了mybatis中关于数据源的配置原理,本篇博客介绍mybatis的事务管理. 对于事务,我们是在mybatis-configuration.xml 文件中配置的: 关于解析 < ...

  10. spring + ibatis 多数据源事务(分布式事务)管理配置方法(转)

    spring + ibatis 多数据源事务(分布式事务)管理配置方法(转) .我先要给大家讲一个概念:spring 的多数据源事务,这是民间的说法.官方的说法是:spring 的分布式事务.明白了这 ...

随机推荐

  1. WPF入门-导航页

    本文适合有winform或web前端基础,且有C#开发基础的同学学习. 本文介绍的开发模式属于MVVM,即Model-View-ViewModel .这种开发模式上手简单,开发迅速. wpf入门第一篇 ...

  2. K8S 性能优化 - K8S APIServer 调优

    前言 K8S 性能优化系列文章,本文为第二篇:Kubernetes API Server 性能优化参数最佳实践. 系列文章: <K8S 性能优化 - OS sysctl 调优> 参数一览 ...

  3. .NET开源强大、易于使用的缓存框架 - FusionCache

    前言 缓存在程序中扮演着提升性能.降低资源消耗.改善用户体验等重要角色,是构建高效.可伸缩.稳定的系统不可或缺的重要组成部分.今天大姚给大家分享一款.NET开源(基于MIT license).强大.易 ...

  4. Phoenix 时区问题

    最近在测试flink从trino查询数据插入到phoenix5的功能,发现一个时间的问题: 明明插入的时间是 '1940-06-01',查询出来的时间会少一天,同样的 Timestamp 也会自动少掉 ...

  5. Django框架——ajax补充、多对多三种创建、序列化组件、批量操作数据、分页器

    ajax补充说明 主要是针对回调函数args接收到的响应数据 1.后端request.is_ajax() 用于判断当前请求是否由ajax发出 2.后端返回的三板斧都会被args接收不再影响整个浏览器页 ...

  6. 安装Visual Studio 2010 教程

    1.下载软件 方法一:关注[ 火耳软件安装 ]公众号获取软件,里面还有很多类型的其他软件 或者: 方法二:我的分享链接:https://pan.baidu.com/s/1_Ow2YR-kbnbSc6o ...

  7. 冬奥幕后故事:从低碳火炬到AI裁判,十四年后中国科技再上场

    ​北京冬奥会开幕后,一个段子在社交媒体上流传甚广:"夏奥开幕式和冬奥开幕式就差半年,这半年人类科技进步真大啊." ​ 文|张婧怡 封面来源|北京日报客户端 冬奥季终于到来. 2月4 ...

  8. 阿里云 EDAS 3.0 助力唱鸭提升微服务幸福感

    简介: EDAS 3.0 提供的微服务治理,很好的支持了唱鸭 APP 实现微服务应用的发布.监控.管理等日常业务场景.作为运维侧的重要平台和开框架的提供者,EDAS 3.0 帮助用户可以更专注业务.微 ...

  9. OpenKruise v0.9.0 版本发布:新增 Pod 重启、删除防护等重磅功能

    简介: OpenKruise 是阿里云开源的云原生应用自动化管理套件,也是当前托管在 Cloud Native Computing Foundation (CNCF) 下的 Sandbox 项目.它来 ...

  10. 阿里云GanosBase重磅升级,发布首个云孪生时空数据库

    ​简介: GanosBase是李飞飞带领的达摩院数据库与存储实验室联合阿里云共同研发的新一代位置智能引擎:本次重磅升级为V4.0版本,推出首个云孪生时空数据库. ​ 作者 | 谢炯 来源 | 阿里技术 ...