首页 > 其他分享 >mybatis-puls解决多数据源事务的问题

mybatis-puls解决多数据源事务的问题

时间:2023-02-23 16:58:40浏览次数:45  
标签:dataSourceOne 数据源 oracleXADataSource private sessionFactory mybatis new public p

直接上代码:

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

标签:dataSourceOne,数据源,oracleXADataSource,private,sessionFactory,mybatis,new,public,p
From: https://www.cnblogs.com/niCong/p/17148657.html

相关文章

  • 三、MybatisPlus常用注解
    @TableName经过以上的测试,在使用MyBatis-Plus实现基本的CRUD时,我们并没有指定要操作的表,只是在Mapper接口继承BaseMapper时,设置了泛型User,而操作的表为user表。由此得出......
  • mybatis中修改的两种方式
    1、updateById:传入的实体就是修改后的值;传入的实体一般只有需要修改的属性有值,对于那些没有值的属性保持原值不变。    2、update ......
  • 一个诡异的 Pulsar InterruptedException 异常
    背景今天收到业务团队反馈线上有个应用往Pulsar中发送消息失败了,经过日志查看得知是发送消息时候抛出了java.lang.InterruptedException异常。和业务沟通后得知是......
  • String集合拼多个or,模糊查询。mybatis-plus-构造器的写法
    List<String>list=newArrayList<>();QueryWrapper<Object>queryWrapper=newQueryWrapper<>();queryWrapper.and(CollUtil.isNotEmpty(list),qw->{list.fo......
  • ssm学习笔记23001-mybatis-config.xml配置详解
    mybatis-config.xml是mybatis的配置文件,具体的一些标签和属性如下:需要注意的是1、配置项是有顺序要求的2、简写的配置有要求:例如类型别名,如果要简写,需要省掉alias属性,m......
  • ssm学习笔记23001-spring+mybatis修改删除和查询
    spring+mybatis修改删除和查询1、在UserMapper接口类中,创建接口在UserMapper接口类中,创建接口packagecom.wjw.mybatis.mapper;importcom.wjw.mybatis.pojo.User;......
  • 整合mybatis-spring
    一.整合mybatis步骤:第一步:导入相关的jar包:junitmybatismysql数据库spring相关的aop植入mybatis-spring【新包,兼容mybatis和spring】<dependencies>......
  • Mybatis-Plus取消自动转驼峰拦截器
    背景项目使用Mybatis-Plus,开启了全局结果集字段转驼峰map-underscore-to-camel-case:true。开启之后如果需要返回下划线需要自定义resultMap现需要返回List<Map>,且返回......
  • day01-Mybatis介绍与入门
    Mybatis介绍与入门1.官方文档Mybatis中文手册:mybatis–MyBatis3或者MyBatis中文网Maven仓库:MavenRepository:org.mybatis»mybatis»3.5.7(mvnrepository.c......
  • 使用Jmockit 测试 spring + mybatis plus 项目 - CRUD Mapper 查询样例
    Jmockit1.46+junit4packagexxx;XXXProgressimportxxx;importcom.baomidou.mybatisplus.core.conditions.Wrapper;importcom.google.common.collect.Lists;impo......