前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java | MyBatis 配置多数据源

Java | MyBatis 配置多数据源

作者头像
双鬼带单
发布2021-05-13 15:50:31
4K0
发布2021-05-13 15:50:31
举报
文章被收录于专栏:CodingToDie

Mybatis 配置多数据源


Table of Contents

前言使用步骤1. 引入库2. 配置多数据源3. 配置


前言

在开发一些报表项目时,很容易涉及到从多个数据源获取数据,这里介绍一下如何给 Mybatis 在配置多数据源.

使用步骤

1. 引入库

正常引入 mybatis 依赖即可

2. 配置多数据源

代码语言:javascript
复制
spring:
  datasource:
    report1:
      driver-class-name: com.mysql.jdbc.Driver
      jdbc-url: jdbc:mysql://127.0.0.1:3306/report_1
      username: root
      password: 123456
    report2:
      driver-class-name: com.mysql.jdbc.Driver
      jdbc-url: jdbc:mysql://127.0.0.1:3306/report_2
      username: root
      password: 123456

3. 配置

配置report1

代码语言:javascript
复制
import com.github.pagehelper.PageInterceptor;
import java.util.Properties;
import javax.sql.DataSource;
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.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
@MapperScan(basePackages = {
    "com.example.demo.mapper.report1"}, sqlSessionFactoryRef = "sqlSessionFactoryReport1")
public class ReportMybatisConfiguration {

  @Bean(name = "reportDB")
  @ConfigurationProperties(prefix = "spring.datasource.report1")
  public DataSource dataSource1() {
    return DataSourceBuilder.create().build();
  }

  @Bean
  public SqlSessionFactory sqlSessionFactoryReport1() throws Exception {
    SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
    factoryBean.setDataSource(dataSource1());

    PageInterceptor pageInterceptor = new PageInterceptor();
    Properties properties = new Properties();
    properties.setProperty("helperDialect", "mysql");
    properties.setProperty("reasonable", "true");
    properties.setProperty("supportMethodsArguments", "true");
    properties.setProperty("params", "count=countSql");
    pageInterceptor.setProperties(properties);
    factoryBean.setPlugins(pageInterceptor);

    return factoryBean.getObject();

  }

  @Bean
  public SqlSessionTemplate sqlSessionTemplateReport1() throws Exception {
    return new SqlSessionTemplate(sqlSessionFactoryReport1());
  }

}

配置report2

代码语言:javascript
复制
import com.github.pagehelper.PageInterceptor;
import java.util.Properties;
import javax.sql.DataSource;
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.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
@MapperScan(basePackages = {
    "com.example.demo.mapper.report2"}, sqlSessionFactoryRef = "sqlSessionFactoryReport2")
public class Report2MybatisConfiguration {

  @Bean(name = "report2DB")
  @ConfigurationProperties(prefix = "spring.datasource.report2")
  public DataSource dataSource2() {
    return DataSourceBuilder.create().build();
  }

  @Bean
  public SqlSessionFactory sqlSessionFactoryReport2() throws Exception {
    SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
    factoryBean.setDataSource(dataSource2());

    org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration();
    configuration.setMapUnderscoreToCamelCase(true);
    factoryBean.setConfiguration(configuration);

    PageInterceptor pageInterceptor = new PageInterceptor();
    Properties properties = new Properties();
    properties.setProperty("helperDialect", "mysql");
    properties.setProperty("reasonable", "true");
    properties.setProperty("supportMethodsArguments", "true");
    properties.setProperty("params", "count=countSql");
    pageInterceptor.setProperties(properties);
    factoryBean.setPlugins(pageInterceptor);

    return factoryBean.getObject();

  }

  @Bean
  public SqlSessionTemplate sqlSessionTemplateReport2() throws Exception {
    return new SqlSessionTemplate(sqlSessionFactoryReport2());
  }

}

这样我们就配置完了,在配置的过程中加入 PageInterceptor 分页插件,如果不需要可以删除 PageInterceptor 关联代码

这样配置后,在包 com.example.demo.mapper.report1 编写的 mapper 则使用 report1 库, 同理在 包 com.example.demo.mapper.report1 编写的 mapper 则使用 report2 库。

这样就完成了多数据源的配置,同理也可以配置更多的数据源

最近的时间不太多,接下来将写几篇关于日常工作中用到的一些技术以及如何与 Spring Boot 整合的文章,计划如下:

  1. 数据库表结构管理 flayway
  2. MyBatis 的整合使用
  3. Spring Data REST 快速构建一个 restful 项目
  4. 使用 Spring Integration 来配置分布式锁
  5. Sentinel 的单机使用和 Sentinel Dashboard 的搭建
  6. 使用 maven git commit 插件来生成打包版本号,方便线程排查
  7. 关于 Spring Boot 和 Spring Cloud 匹配版本的查看方法
  8. 如果快速将一个 Spring Boot 项目,改成Spring Cloud 项目
  9. 使用 Spring Boot Admin 来监控我们的 Spring Cloud 项目
  10. 风控规则集的开发实践
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-05-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 双鬼带单 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Mybatis 配置多数据源
  • 前言
  • 使用步骤
    • 1. 引入库
      • 2. 配置多数据源
        • 3. 配置
        相关产品与服务
        腾讯云 BI
        腾讯云 BI(Business Intelligence,BI)提供从数据源接入、数据建模到数据可视化分析全流程的BI能力,帮助经营者快速获取决策数据依据。系统采用敏捷自助式设计,使用者仅需通过简单拖拽即可完成原本复杂的报表开发过程,并支持报表的分享、推送等企业协作场景。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档