springboot3 +mybatisPlus 整合多数据源

注意:不是主从,只是简单的多数据源

下面是 mysql8和 sqlserver2016的多数据源的配置

maven

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.2.3</version> <!-- lookup parent from repository -->
        <relativePath/>
    </parent>
    
    <properties>
        <java.version>21</java.version>
        <mysql.version>8.0.28</mysql.version>
        <sqlserver.version>12.3.0.jre20-preview</sqlserver.version> 
        <mybatis-plus.version>3.5.5</mybatis-plus.version>
    </properties>
            
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql.version}</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.microsoft.sqlserver/mssql-jdbc -->
        <dependency>
            <groupId>com.microsoft.sqlserver</groupId>
            <artifactId>mssql-jdbc</artifactId>
            <version>${sqlserver.version}</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-spring-boot3-starter</artifactId>
            <version>${mybatis-plus.version}</version>
        </dependency>

yaml

spring:
  datasource:
    sys:
      driver-class-name: com.mysql.cj.jdbc.Driver
      jdbcUrl: jdbc:mysql://localhost:3306/scanner_server?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&autoReconnect=true&allowMultiQueries=true
      username: root
      password: xxx
    sap:
      driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
      jdbcUrl: jdbc:sqlserver://localhost:1433;DatabaseName=TKDZY;encrypt=false; 
      username: sa
      password: xxx

config

SysMapperConfig
package com.tk.scanner.server.config.mapper;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.core.MybatisConfiguration;
import com.baomidou.mybatisplus.core.config.GlobalConfig;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.DataPermissionInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import com.tk.scanner.server.plugin.mybatis.handler.MyDataPermissionHandler;
import com.tk.scanner.server.plugin.mybatis.handler.MyMetaObjectHandler;
import org.apache.ibatis.logging.stdout.StdOutImpl;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;

import javax.sql.DataSource;

/**
 *@author shen chen
 *@Date 2024-03-04
 *@Description
 */
@Configuration
@MapperScan(basePackages = {"com.tk.scanner.server.mapper.sys"}, sqlSessionTemplateRef = "sysSqlSessionTemplate")
public class SysMapperConfig {

    @Bean(name = "sysDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.sys") // prefix值必须是application.properteis中对应属性的前缀
    @Primary
    public DataSource sysDataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean
    public SqlSessionFactory sysSqlSessionFactory(@Qualifier("sysDataSource") DataSource dataSource, GlobalConfig globalConfig) throws Exception {
        MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/sys/*.xml"));
        bean.setTypeAliasesPackage("com.tk.scanner.server.model.entity");
        MybatisConfiguration configuration = new MybatisConfiguration();
        configuration.setMapUnderscoreToCamelCase(true);
        // 配置打印 sql 语句
        configuration.setLogImpl(StdOutImpl.class);
        bean.setConfiguration(configuration);

        bean.setGlobalConfig(globalConfig);
        bean.setPlugins(sysMybatisPlusInterceptor());
        return bean.getObject();
    }

    /**
     * 自动填充数据库创建人、创建时间、更新人、更新时间
     * SapMapperConfig 也同时使用了这个 globalConfig 对象
     */
    @Bean
    public GlobalConfig globalConfig() {
        GlobalConfig globalConfig = new GlobalConfig();
        globalConfig.setMetaObjectHandler(new MyMetaObjectHandler());
        GlobalConfig.DbConfig dbConfig = new GlobalConfig.DbConfig()
                .setIdType(IdType.AUTO)
                .setLogicDeleteField("deleted")
                .setLogicDeleteValue("1")
                .setLogicNotDeleteValue("0");
        globalConfig.setDbConfig(dbConfig);
        return globalConfig;
    }

    @Bean
    public SqlSessionTemplate sysSqlSessionTemplate(@Qualifier("sysSqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
        return new SqlSessionTemplate(sqlSessionFactory);
    }

    @Bean(name = "sysTransactionManager")
    @Primary
    public DataSourceTransactionManager sysTransactionManager(@Qualifier("sysDataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    /**
     * 添加分页插件
     */
    @Bean
    public MybatisPlusInterceptor sysMybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        // 数据权限
        interceptor.addInnerInterceptor(new DataPermissionInterceptor(new MyDataPermissionHandler()));
        // 分页插件
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));// 如果配置多个插件,切记分页最后添加
        // interceptor.addInnerInterceptor(new PaginationInnerInterceptor()); // 如果有多数据源可以不配具体类型 否则都建议配上具体的DbType
        return interceptor;
    }

}
SapMapperConfig
package com.tk.scanner.server.config.mapper;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.core.MybatisConfiguration;
import com.baomidou.mybatisplus.core.config.GlobalConfig;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import org.apache.ibatis.logging.stdout.StdOutImpl;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;

import javax.sql.DataSource;

/**
 *@author shen chen
 *@Date 2024-03-04
 *@Description
 */
@Configuration
@MapperScan(basePackages = {"com.tk.scanner.server.mapper.sap"}, sqlSessionTemplateRef = "sapSqlSessionTemplate")
public class SapMapperConfig {

    @Bean(name = "sapDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.sap") // prefix值必须是application.properteis中对应属性的前缀
    public DataSource sapDataSource() {
        return DataSourceBuilder.create().build();
    }


    @Bean
    public SqlSessionFactory sapSqlSessionFactory(@Qualifier("sapDataSource") DataSource dataSource, GlobalConfig globalConfig) throws Exception {
        MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/sap/*.xml"));
        bean.setTypeAliasesPackage("com.tk.sap.entity");
        MybatisConfiguration configuration = new MybatisConfiguration();
        configuration.setMapUnderscoreToCamelCase(true);
        // 配置打印 sql 语句
        configuration.setLogImpl(StdOutImpl.class);
        bean.setConfiguration(configuration);

        bean.setGlobalConfig(globalConfig);
        bean.setPlugins(sapMybatisPlusInterceptor());
        return bean.getObject();
    }

    @Bean
    public SqlSessionTemplate sapSqlSessionTemplate(@Qualifier("sapSqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
        return new SqlSessionTemplate(sqlSessionFactory);
    }

    @Bean(name = "sapTransactionManager")
    public DataSourceTransactionManager sapTransactionManager(@Qualifier("sapDataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    /**
     * 添加分页插件
     */
    @Bean
    public MybatisPlusInterceptor sapMybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        // interceptor.addInnerInterceptor(new PaginationInnerInterceptor()); 如果有多数据源可以不配具体类型 否则都建议配上具体的DbType
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.SQL_SERVER));// 如果配置多个插件,切记分页最后添加
        return interceptor;
    }

}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SpringBoot可以使用MyBatis-Plus实现多数据源配置。多数据源配置是指在一个应用中配置多个数据库连接,并能够根据需要选择使用哪个数据库。通过MyBatis-Plus,可以方便地配置和使用多个数据源。 在配置多数据源时,可以使用MyBatis-Plus提供的注解和配置类来实现。可以根据需要配置多个数据源,每个数据源对应一个数据库。例如,可以配置MySQL数据库、PostgreSQL数据库和Doris数据库作为不同的数据源。 具体配置方法可以参考引用和引用中提到的文章。这些文章详细介绍了如何在SpringBoot整合MyBatis-Plus并配置动态数据源。你可以根据这些文章的参考来配置你的多数据源。 在配置完成后,你可以根据需要在代码中选择使用哪个数据源进行数据库操作。通过配置多数据源,你可以在一个应用中同时操作多个数据库,方便实现复杂的业务逻辑。 总之,SpringBootMyBatis-Plus提供了方便的方式来配置和使用多数据源,可以满足在一个应用中操作多个数据库的需求。你可以参考相关文档并按照需求进行配置和使用。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [【应用】SpringBoot -- 基于 MyBatis-Plus 实现多数据源配置](https://blog.csdn.net/zqf787351070/article/details/127775519)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [SpringBoot整合MyBatisPlus配置动态数据源的方法](https://download.csdn.net/download/weixin_38659646/12749115)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值