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就可以了

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

(0)

相关推荐

  • springboot整合mybatis分页拦截器的问题小结

    简介 又到了吹水时间,是这样的,今天开发时想将自己写好的代码拿来优化,因为不想在开发服弄,怕搞坏了到时候GIT到生产服一大堆问题,然后把它分离到我轮子(工具)项目上,最后运行后发现我获取List的时候很卡至少10秒,我惊了平时也就我的正常版本是800ms左右(不要看它很久,因为数据量很大,也很正常.),前提是我也知道很慢,就等的确需要优化时,我在放出我优化的plus版本,回到10秒哪里,最开始我刚刚接到这个app项目时,在我用 PageHelper.startPage(page, num);(分

  • SpringBoot集成Mybatis+xml格式的sql配置文件操作

    SpringBoot集成Mybatis+xml格式的sql配置文件 最近一直在研究SpringBoot技术,由于项目需要,必须使用Mybatis持久化数据.所以就用SpringBoot集成Mybatis. 由于项目使用的是xml配置文件格式的SQL管理,所以SpringBoot必须配置Mybatis文件.但这样做的话又与SpringBoot的零xml配置冲突. 所以索性使用java类来配置Mybatis. 下面是Mybatis的配置类: import java.util.Properties;

  • springboot 2.0 mybatis mapper-locations扫描多个路径的实现

    springboot 2.0 mybatis mapper-locations扫描多个路径 mapper-locations扫描多个路径,中间以,分开, 如果mapper.xml在源码包下,配置成classpath*开头比较好使 mybatis: mapper-locations: classpath*:mapper/*.xml,classpath*:com/urthink/upfs/**/*Mapper.xml type-aliases-package: com.urthink.upfs.sp

  • 解决SpringBoot整合MybatisPlus分模块管理遇到的bug

    前言 这个Bug前前后后折腾了两天才找到答案,虽说不是完全两天的工作时间在调试这个问题,但是过程也确实曲折,所以做一下记录,也当做一次自我反省 背景 SpringBoot 与 MyBatis-Plus 的 pom 依赖 <!-- SpringBoot 版本 --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent&

  • springboot中mybatis多数据源动态切换实现

    目录 多数据源配置引入 动态数据源路由实现 动态数据源切换使用 案例源码 在开发中,动态数据源配置还是用的比较多的,比如在多数据源使用方面,又或者是在多个DB之间切换方面.这里给出一个动态数据源的配置方案,两个DB均以mysql为例. 多数据源配置引入 mybatis和mysql在springboot中的引入这里就不在说了,不了解的可以参见springboot中mysql与mybatis的引入. 数据源配置如下: datasource: master: type: com.alibaba.dru

  • 一篇超详细的SpringBoot整合MybatisPlus的文章

    目录 总结 创建个SpringBoot项目 勾选生所需的依赖: 我把application的后缀改为.yml了,方便些. pom.xml: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instanc

  • 浅谈Springboot下引入mybatis遇到的坑点

    一. springBoot + Mybatis 配置完成后,访问数据库遇到的问题 首先出现这个问题,肯定是xml文件与mapper接口没有匹配上,甚至是xml文件根本没有被扫描到. 于是会从配置上进行检查: 1. xml中的namespace命名是否与mapper接口路径一致,需保证一致. 2. application.properties或者application.yml文件中配置mybatis的属性对否,如下: 第一行 typeAliasesPackage是实体类的包路径: 第二行mappe

  • 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-b

  • springboot配置多数据源的一款框架(dynamic-datasource-spring-boot-starter)

    前言 前篇博客介绍了用基本的方式做多数据源,可以应对一般的情况,但是遇到一些复杂的情况就需要扩展下功能了,比如:动态增减数据源.数据源分组,纯粹多库,读写分离一主多从,从其他数据库或者配置中心读取数据源等等.其实就算没有这些需求,使用此款框架实现多数据源也比之前要便捷,快速的多 框架简介 dynamic-datasource-spring-boot-starter 是一个基于 springboot 的快速集成多数据源的启动器 文档:https://github.com/baomidou/dyna

  • 使用SpringBoot配置多数据源的经验分享

    目录 1. 引入jar包 2. properties配置 3. 分别配置两个数据源 4. Dao目录 5. Entity 6. Mapper文件 7. Controller测试 8. 结果验证 1. 引入jar包 pom.xml文件 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi

  • springboot配置多数据源的实例(MongoDB主从)

    相信看过上一篇文章的小伙伴已经知道了, 这章要讲的就是MongoDB主从配置. 在这边文章中,你将要学到的是在项目中配置主从数据库,并且兼容其他数据库哟..这些都是博主项目中需要并且比较重要的知识哦~ 好了,废话不多说,直接进主题. 1.pom依赖 <span style="white-space:pre"> </span><dependency> <groupId>org.springframework.boot</groupId

  • 教你使用springboot配置多数据源

    一.建库建表 1.1 创建数据库db1和数据库db2 1.2 在数据库db1中创建表db1 CREATE TABLE `db1` ( `id` int unsigned zerofill NOT NULL AUTO_INCREMENT, `name` varchar(50) DEFAULT NULL, `age` int unsigned zerofill DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFA

  • springboot配置多数据源后mybatis拦截器失效的解决

    目录 1. 解析配置文件初始化数据源 2. 定义数据源枚举类型 3. TheadLocal保存数据源类型 4. 自定义sqlSessionProxy 5. 自定义路由 6. 定义切面,dao层定义切面 7. 最后在写库增加事务管理 8. 在配置文件中增加数据源配置 配置文件是通过springcloudconfig远程分布式配置.采用阿里Druid数据源.并支持一主多从的读写分离.分页组件通过拦截器拦截带有page后缀的方法名,动态的设置total总数. 1. 解析配置文件初始化数据源 @Conf

  • Springboot整合JPA配置多数据源流程详解

    目录 1. Maven 2. 基本配置 DataSource 3. 多数据源配置 3.1 JpaConfigOracle 3.2 JpaConfigMysql 4. Dao层接口 1. Maven <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>

  • SpringBoot集成Druid配置(yaml版本配置文件)详解

    maven 配置 <!-- https://mvnrepository.com/artifact/com.alibaba/druid --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.2.3</version> </dependency> <dependency&g

  • springboot 配置DRUID数据源的方法实例分析

    本文实例讲述了springboot 配置DRUID数据源的方法.分享给大家供大家参考,具体如下: druid 是阿里开源的数据库连接池. 开发时整合 druid 数据源过程. 1.修改pom.xml <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <dependency> &l

  • SpringBoot集成Druid监控页面最小化配置操作

    在项目中使用阿里的druid连接池,pom文件配置: <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>com.alibaba</groupId&g

随机推荐