springboot配置多数据源并集成Druid和mybatis的操作

 更新时间:2021年07月27日 14:11:17   作者:BUG记录机  
这篇文章主要介绍了springboot配置多数据源并集成Druid和mybatis的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

可以是mysql,oracle等多种不同数据源

项目结构

在这里插入图片描述

注意:只有@Primary的数据源所控制的mapper文件加注解@Mapper,否则mybatis无法切换扫描;即本文中的mapper/opener文件夹下mapper加注解

1、pom

驱动之外加入druid和mybatis等pom,整合mybatis自行搜索

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

2、properties配置

##################    JDBC 配置    ################
#资讯数据库一配置
spring.datasource.druid.opener.driver-class-name=oracle.jdbc.driver.OracleDriver
spring.datasource.druid.opener.url=jdbc:oracle:thin:@127.0.0.1:1521:wljrdb
spring.datasource.druid.opener.username=opener
spring.datasource.druid.opener.password=123456

#舆情数据库二配置
spring.datasource.druid.yq.driver-class-name=oracle.jdbc.driver.OracleDriver
spring.datasource.druid.yq.url=jdbc:oracle:thin:@127.0.0.1:1521:wljrdb
spring.datasource.druid.yq.username=YQ
spring.datasource.druid.yq.password=123456

#f10数据库二配置
spring.datasource.druid.f10.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.druid.f10.url=jdbc:mysql://127.0.0.1:3306/iwin-f10?characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2b8
spring.datasource.druid.f10.username=root
spring.datasource.druid.f10.password=123456

##########################  druid配置   ##########################
# 下面为连接池的补充设置,应用到上面所有数据源中# 初始化大小,最小,最大
##################    连接池配置    ################
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.druid.initial-size=5
spring.datasource.druid.max-active=20
spring.datasource.druid.min-idle=5
spring.datasource.druid.max-wait=30000

spring.datasource.druid.validation-query=SELECT 1 FROM DUAL
spring.datasource.druid.validation-query-timeout=30000
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
spring.datasource.druid.filters=stat,wall,log4j2
# 通过connectProperties属性来打开mergeSql功能;慢SQL记录
spring.datasource.druid.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000

# 监控中心 如果设置了StatViewServlet,即配置了监控池认证,
# 要进监控池需要输入http://127.0.0.1:8083/druid/login.html,如果没配置,直接输入http://127.0.0.1:8083/druid/即可
spring.datasource.druid.stat-view-servlet.enabled= true
spring.datasource.druid.stat-view-servlet.url-pattern= /druid/*
spring.datasource.druid.stat-view-servlet.reset-enable= true
spring.datasource.druid.stat-view-servlet.login-username= admin
spring.datasource.druid.stat-view-servlet.login-password= admin123
spring.datasource.druid.stat-view-servlet.allow= 127.0.0.1

3、配置文件

import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.mapper.MapperScannerConfigurer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
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: admin
 */
@Configuration
public class MultiDataSourceConfig {

    private final static Logger logger = LoggerFactory.getLogger(MultiDataSourceConfig.class);

    @Bean
    @Primary
    @ConfigurationProperties(prefix = "spring.datasource.druid.opener")
    public DataSource openerDataSource(){
        logger.info("opener数据源初始化。。。");
        return DruidDataSourceBuilder.create().build();
    }

    @Bean
    @ConfigurationProperties(prefix = "spring.datasource.druid.yq")
    public DataSource yqDataSource(){
        logger.info("YQ数据源初始化。。。");
        return DruidDataSourceBuilder.create().build();
    }

    @Bean
    @ConfigurationProperties(prefix = "spring.datasource.druid.f10")
    public DataSource f10DataSource(){
        logger.info("f10数据源初始化。。。");
        return DruidDataSourceBuilder.create().build();
    }

    @Bean
    @Primary
    public SqlSessionFactory openerSqlSessionFactory(@Qualifier("openerDataSource")DataSource openerDataSource) throws Exception{
        SqlSessionFactoryBean fb = new SqlSessionFactoryBean();
        fb.setDataSource(openerDataSource);
        fb.setMapperLocations(
                new PathMatchingResourcePatternResolver().getResources("classpath:/mybatis/opener/*.xml")
        );
        return fb.getObject();
    }

    @Bean
    public SqlSessionFactory yqSqlSessionFactory(@Qualifier("yqDataSource")DataSource yqDataSource) throws Exception{
        SqlSessionFactoryBean fb = new SqlSessionFactoryBean();
        fb.setDataSource(yqDataSource);
        fb.setMapperLocations(
                new PathMatchingResourcePatternResolver().getResources("classpath:/mybatis/yq/*.xml")
        );
        return fb.getObject();
    }

    @Bean
    public SqlSessionFactory f10SqlSessionFactory(@Qualifier("f10DataSource")DataSource f10DataSource) throws Exception{
        SqlSessionFactoryBean fb = new SqlSessionFactoryBean();
        fb.setDataSource(f10DataSource);
        fb.setMapperLocations(
                new PathMatchingResourcePatternResolver().getResources("classpath:/mybatis/f10/*.xml")
        );
        return fb.getObject();
    }

    @Bean(name="openerMapperScannerConfigurer")
    @Primary
    public MapperScannerConfigurer openerMapperScannerConfigurer(){
        MapperScannerConfigurer configurer = new MapperScannerConfigurer();
        configurer.setSqlSessionFactoryBeanName("openerSqlSessionFactory");
        configurer.setBasePackage("com.cfzq.lz.mapper.opener");
        return configurer;
    }

    @Bean(name="yqMapperScannerConfigurer")
    public MapperScannerConfigurer yqMapperScannerConfigurer(){
        MapperScannerConfigurer configurer = new MapperScannerConfigurer();
        configurer.setSqlSessionFactoryBeanName("yqSqlSessionFactory");
        configurer.setBasePackage("com.cfzq.lz.mapper.yq");
        return configurer;
    }

    @Bean(name="f10MapperScannerConfigurer")
    public MapperScannerConfigurer f10MapperScannerConfigurer(){
        MapperScannerConfigurer configurer = new MapperScannerConfigurer();
        configurer.setSqlSessionFactoryBeanName("f10SqlSessionFactory");
        configurer.setBasePackage("com.cfzq.lz.mapper.f10");
        return configurer;
    }

    @Bean(name="openerTransactionManager")
    @Primary
    public DataSourceTransactionManager openerTransactionManager(@Qualifier("openerDataSource")DataSource openerDataSource) throws Exception{
        return new DataSourceTransactionManager(openerDataSource);
    }

    @Bean(name="yqTransactionManager")
    public DataSourceTransactionManager yqTransactionManager(@Qualifier("yqDataSource")DataSource yqDataSource) throws Exception{
        return new DataSourceTransactionManager(yqDataSource);
    }

    @Bean(name="f10TransactionManager")
    public DataSourceTransactionManager f10TransactionManager(@Qualifier("f10DataSource")DataSource f10DataSource) throws Exception{
        return new DataSourceTransactionManager(f10DataSource);
    }

}

代码调用

很简单,使用哪个数据源service注入哪个mapper就可以了
在这里插入图片描述

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java实现把文件及文件夹压缩成zip

    Java实现把文件及文件夹压缩成zip

    这篇文章主要介绍了Java实现把文件及文件夹压缩成zip,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • Spring框架开发IOC两种创建工厂方法详解

    Spring框架开发IOC两种创建工厂方法详解

    这篇文章主要介绍了Spring框架IOC两种创建工厂方法详解,文中附含详细的代码示例分别对静态方法和实例方法创建工厂作了简要的分析
    2021-09-09
  • c语言来实现贪心算法之装箱问题

    c语言来实现贪心算法之装箱问题

    这篇文章主要介绍了c语言来实现贪心算法之装箱问题,需要的朋友可以参考下
    2015-03-03
  • Mybatis 自定义类型处理器示例详解

    Mybatis 自定义类型处理器示例详解

    在某些情况下我们需要对类型做处理,例如数据存储的是Long,程序里是BigDecimal,那么我们出库入库都需要做处理,此时就可以使用类型处理器,本文通过示例给大家介绍Mybatis 自定义类型处理器的相关知识,感兴趣的朋友跟随小编一起看看吧
    2023-10-10
  • Java验证时间格式是否正确方法类项目实战

    Java验证时间格式是否正确方法类项目实战

    在很多场景中我们需要验证时间日期的是否属于正确的格式,验证时间是否符合常规的,本文就来介绍一下几种方式,感兴趣的可以了解一下
    2022-04-04
  • java Quartz定时器任务与Spring task定时的几种实现方法

    java Quartz定时器任务与Spring task定时的几种实现方法

    本篇文章主要介绍了java Quartz定时器任务与Spring task定时的几种实现方法的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2017-02-02
  • SpringBoot实现抽奖算法的示例代码

    SpringBoot实现抽奖算法的示例代码

    这篇文章主要为大家详细介绍了如何通过SpringBoot实现抽奖算法,文中的示例代码简洁易懂,具有一定的参考价值,感兴趣的小伙伴可以了解一下
    2023-06-06
  • 实战分布式医疗挂号系统之设置微服务搭建医院模块

    实战分布式医疗挂号系统之设置微服务搭建医院模块

    这篇文章主要为大家介绍了实战分布式医疗挂号系统之搭建医院设置微服务模块,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-04-04
  • 基于SpringBoot2.0默认使用Redis连接池的配置操作

    基于SpringBoot2.0默认使用Redis连接池的配置操作

    这篇文章主要介绍了基于SpringBoot2.0默认使用Redis连接池的配置操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • Java基础题新手练习(二)

    Java基础题新手练习(二)

    下面小编就为大家带来一篇Java基础的几道练习题(分享)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望可以帮到你
    2021-07-07

最新评论