MP多数据源

本篇文章主要是集成 更多功能请参考官网 链接: https://mp.baomidou.com/guide/quick-start.html.
首先Boot整合mybatis
1.导入maven坐标

1.导入坐标
<dependency>
   <groupId>com.baomidou</groupId>
   <artifactId>mybatis-plus-boot-starter</artifactId>
   <version>3.2.0</version>
</dependency>

2.配置类 用于扫包 (或者或者使用注解在启动类上@MapperScanner)

@Configuration
public class MyBatisPlusConfig {
    @Bean
    public MapperScannerConfigurer mapperScannerConfigurer() {
        MapperScannerConfigurer scannerConfigurer = new MapperScannerConfigurer();        scannerConfigurer.setBasePackage("com.cloud.demo");
        return scannerConfigurer;
    }
}

3.yml配置文件

mybatis-plus:
   mapper-locations: classpath:/mapper/*Mapper.xml
   typeAliasesPackage: com.ftsino.citychallenge.common.entity,com.ftsino.citychallenge.common.po
   configuration:
      log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

=============================================
接下来就是MP多数据源配置
1.引入dynamic依赖(动态数据源)
dynamic的版本查看
链接: https://mvnrepository.com.

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

2.yml多数据源配置

spring:
  datasource:
    dynamic:
      primary: master #设置默认的数据源或者数据源组,默认值即为master
      strict: false #设置严格模式,默认false不启动. 启动后在未匹配到指定数据源时候回抛出异常,不启动会使用默认数据源.
      datasource:
        master:
          url: jdbc:mysql://xx.xx.xx.xx:3306/dynamic
          username: root
          password: 123456
          driver-class-name: com.mysql.jdbc.Driver
        slave_1:
          url: jdbc:mysql://xx.xx.xx.xx:3307/dynamic
          username: root
          password: 123456
          driver-class-name: com.mysql.jdbc.Driver
        slave_2:
          url: ENC(xxxxx) # 内置加密,使用请查看详细文档
          username: ENC(xxxxx)
          password: ENC(xxxxx)
          driver-class-name: com.mysql.jdbc.Driver
          schema: db/schema.sql # 配置则生效,自动初始化表结构
          data: db/data.sql # 配置则生效,自动初始化数据
          continue-on-error: true # 默认true,初始化失败是否继续
          separator: ";" # sql默认分号分隔符
          
       #......省略
       #以上会配置一个默认库master,一个组slave下有两个子库slave_1,slave_2

3.使用注解@DS 来切换指定的数据库
(指定的是yml中配置的名字 如果不指定 走yml中的默认配置数据库)

@DS("slave_1")
public interface AccountMapper extends BaseMapper<Account> {

}

public interface UserMapper extends BaseMapper<User> {

}

==============================================
能力有限 多数据源采用的是jta+atomikos,并且动态数据源也没了…
欢迎指教
话不多说 立马开始
1.yml配置

spring:
  datasource:
    master:
      url: jdbc:mysql://xx.xxx.xx.xxx:3306/xx?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&useAffectedRows=true
      username: xxxx
      password: xxxx
      driver-class-name: com.mysql.jdbc.Driver
    slave:
      url: jdbc:mysql://xx.xxx.xx.xxx:3306/xx?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&useAffectedRows=true
      username: xxxx
      password: Ftsino2019@
      driver-class-name: com.mysql.jdbc.Driver
  1. db配置(主要是用来接受多个数据库配置)
    注: 这如果加上@Configuration 则省略第四步
@Data
@ConfigurationProperties(prefix = "spring.datasource.master")
public class DB1Config {
    
    private String url;

    private String username;

    private String password;

    private String driverClassName;
}
  1. 普通的集成MP的通用mapper就不可以使用了 这里换成MP自带的工厂Bean

import com.atomikos.jdbc.AtomikosDataSourceBean;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import com.mysql.cj.jdbc.MysqlXADataSource;
import org.apache.ibatis.plugin.Interceptor;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;

import javax.sql.DataSource;
import java.sql.SQLException;

@Configuration
@MapperScan(basePackages= {"com.wang.demo.mapper.db1"},sqlSessionFactoryRef="db1SqlSessionFactory")
public class DB1DataSourceConfig {
    // 配置数据源
    @Primary
    @Bean("db1DataSource")
    public DataSource testDataSource (DB1Config DB1Config) throws SQLException {
        //表示使用的是mysql数据库
        MysqlXADataSource mysqlXaDataSource = new MysqlXADataSource();
        mysqlXaDataSource.setUrl(DB1Config.getUrl());
        mysqlXaDataSource.setPinGlobalTxToPhysicalConnection(true);
        mysqlXaDataSource.setPassword(DB1Config.getPassword());
        mysqlXaDataSource.setUser(DB1Config.getUsername());
        mysqlXaDataSource.setPinGlobalTxToPhysicalConnection(true);

        //Atomikos负责管理所有的事务
        AtomikosDataSourceBean xaDataSource = new AtomikosDataSourceBean();
        xaDataSource.setXaDataSource(mysqlXaDataSource);
        xaDataSource.setUniqueResourceName("db1DataSource");
        return xaDataSource;
    }

    @Bean(name = "db1SqlSessionFactory")
    public SqlSessionFactory testSqlSessionFactory(@Qualifier("db1DataSource") DataSource dataSource)
            throws Exception {
        //注意,这里引入的事MP的工厂,而不是mybatis的工厂SqlSessionFactoryBean
        MybatisSqlSessionFactoryBean bean=new MybatisSqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        //引入Mapper.xml文件的位置
        Resource[] resources = new PathMatchingResourcePatternResolver()
                .getResources("classpath*:/mapper/db1/*.xml");
        bean.setMapperLocations(resources);

        return bean.getObject();
    }

    @Bean(name = "db1SqlSessionTemplate")
    public SqlSessionTemplate testSqlSessionTemplate(
            @Qualifier("db1SqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}

4.启动类


@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
@EnableConfigurationProperties(value = {DB2Config.class, DB1Config.class})
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

}

最后来个项目总览
在这里插入图片描述
亲测可用!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值