springboot(mybatis)多数据源:mysql+mysql

未名胡      2022-04-20     476

关键词:

在做数据迁移的时候,通常数据库表的结构和数据的格式都会发生变化,采用sql迁移的难度复杂很多,所以可以使用代码进行多数据库操作。本文简单介绍mysql迁移到mysql。其他项目相关配置,请自行查找

1、application.yml

server:
  port: 9281


#spring:
#  profiles:
#    active: dev

#数据库1
datasource1:
  url: jdbc:mysql://localhost:3306/ios666_history?useSSL=false&useUnicode=true
  username: root
  password:
  driver-class-name: com.mysql.jdbc.Driver

#数据库2
datasource2:
  url: jdbc:mysql://localhost:3306/av8d?useSSL=false&useUnicode=true
  username: root
  password:
  driver-class-name: com.mysql.jdbc.Driver

2.SpringbootApplication 禁止加载自身对DataSource的扫描

@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
public class DatasourceApplication 

  public static void main(String[] args) 

    SpringApplication.run(DatasourceApplication.class, args);

  

3.DataSourceConfig.java 对 application.yml 读取

@Configuration
public class DataSourceConfig 

    @Bean(name = "dbOneDataSource")
    @Primary
    @ConfigurationProperties(prefix = "datasource1") // application.yml 中对应属性的前缀
    public DataSource dbOneDataSource() 
        return DataSourceBuilder.create().build();
    


    @Bean(name = "dbTwoDataSource")
    @ConfigurationProperties(prefix = "datasource2") // application.yml 中对应属性的前缀
    public DataSource dbTwoDataSource() 
        return DataSourceBuilder.create().build();
    

这里创建了2个Bean,由dbOneDataSource 和 dbTwoDataSource 读取并创建数据源。

二、数据源的创建 

如果有多个就直接创建多个,下面说说 SqlSessionFactory && SqlSessionTemplate 创建 。为了方便管理,我用内部类去解决。

@Slf4j
public class MybatisConfig 

    /**
     * 第一个数据库 SqlSessionFactory && SqlSessionTemplate 创建
     */

    @Configuration
    @MapperScan(basePackages = "com.sojson.datasource.one.mapper",
            sqlSessionFactoryRef = "sqlSessionFactoryOne",
            sqlSessionTemplateRef = "sqlSessionTemplateOne")
    public static  class DBOne
        @Resource
        DataSource dbOneDataSource;



        @Bean
        public SqlSessionFactory sqlSessionFactoryOne() throws Exception 
            log.info("sqlSessionFactoryOne 创建成功。");
            SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();

            factoryBean.setDataSource(dbOneDataSource);

            factoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/one/*.xml"));
            return factoryBean.getObject();
        


        @Bean
        public SqlSessionTemplate sqlSessionTemplateOne() throws Exception 
            SqlSessionTemplate template = new SqlSessionTemplate(sqlSessionFactoryOne()); // 使用上面配置的Factory
            return template;

        

    


    /**
     * 第二个数据库 SqlSessionFactory && SqlSessionTemplate 创建
     */

    @Configuration
    @MapperScan(basePackages = "com.sojson.datasource.two.mapper",
            sqlSessionFactoryRef = "sqlSessionFactoryTwo",
            sqlSessionTemplateRef ="sqlSessionTemplateTwo" )
    public static class DBTwo

        @Resource
        DataSource dbTwoDataSource;



        @Bean
        public SqlSessionFactory sqlSessionFactoryTwo() throws Exception 

            log.info("sqlSessionFactoryTwo 创建成功。");
            SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
            factoryBean.setDataSource(dbTwoDataSource);


            factoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/two/*.xml"));

            return factoryBean.getObject();

        


        @Bean
        public SqlSessionTemplate sqlSessionTemplateTwo() throws Exception 
            SqlSessionTemplate template = new SqlSessionTemplate(sqlSessionFactoryTwo()); // 使用上面配置的Factory
            return template;
        

    

这里要详细说明的一下,因为创建了2套的SqlSessionFactory && SqlSessionTemplate,那怎么来区分或者说怎么分配数据源呢?

通过注释 :basePackages = "com.sojson.datasource.one.mapper"来定义第一个数据源 SqlSessionFactory 的mapper目录。

通过注释 :basePackages = "com.sojson.datasource.two.mapper"来定义第二个数据源 SqlSessionFactory mapper目录。

三、多数据源测试q

@RequestMapping("api")
@RestController
public class IndexController 

    @Autowired
    OneStockMapper oneStockMapper;
    @Autowired
    TwoStockMapper twoStockMapper;

    @RequestMapping("")

    public Map<String,Object> index()

        Map<String,Object> result = new HashMap<>();
        //第一个数据源
        Stock entity = oneStockMapper.selectByPrimaryKey(1);

        //第二个数据查询
        Stock twoEntity = twoStockMapper.selectByPrimaryKey(1);
        result.put("entity",entity);
        result.put("twoEntity",twoEntity);
        return result;

    

项目下载地址:

数据同步spingboot连接多个mysql数据库.zip

springboot+mybatis链接多数据库

...据库:https://cloud.tencent.com/developer/article/1676947https://springboot.io/t/topic/2782https://m.imooc.com/article/details?article_id=310840https://blog.csdn.net/u013490585/article/details/108497108技术交流欢迎关注我的微信公众号:程序员大宝。一个乐于分... 查看详情

springboot+mybatis链接多数据库

...据库:https://cloud.tencent.com/developer/article/1676947https://springboot.io/t/topic/2782https://m.imooc.com/article/details?article_id=310840https://blog.csdn.net/u013490585/article/details/108497108技术交流欢迎关注我的微信公众号:程序员大宝。一个乐于分... 查看详情

springboot+mybatis+druid配置多数据源(mysql+postgre)

springboot+mybatis+Druid配置多数据源(mysql+postgre)引入pom依赖设置application多数据源config配置db1config配置(主数据库配置)db2config配置(其他数据库)事务处理mapper层springboot+mybatis+Druid配置多数据源(mysql+postgre)参考资料:第八章springboot+mybatis+... 查看详情

springboot+mybatis多数据源切换

由于公司业务划分了多个数据库,开发一个项目会同事调用多个库,经过学习我们采用了注解+aop的方式实现的1.首先定义一个注解类@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.METHOD)public@interfaceTargetDataSource{ Stringvalue();//此处接收... 查看详情

springboot:mybatis配置多数据源

第一个数据源:importorg.springframework.boot.context.properties.ConfigurationProperties;importorg.springframework.stereotype.Component;@Component@ConfigurationProperties(prefix="spring.datasource")publicclas 查看详情

springboot入门之基于druid配置mybatis多数据源

...处理,这篇了解下使用基于基于Druid配置Mybatis多数据源。SpringBoot默认配置数据库连接信息时只需设置url等属性信息就可以了,SpringBoot就会基于约定根据配置信息实例化对象,但是一般大型的项目都是有多个子系统或者多个数据... 查看详情

springboot+mybatis+pagehelper配置多数据源

 前言:本文为springboot结合mybatis配置多数据源,在项目当中很多情况是使用主从数据源来读写分离,还有就是操作多库,本文介绍如何一个项目同时使用2个数据源。也希望大家带着思考去学习!博主是最近才学的配置写成博... 查看详情

springboot2.x:mybatis多数据源配置

前言MyBatis多数据源配置,最近在项目建设中,需要在原有系统上扩展一个新的业务模块,特意将数据库分库,以便减少复杂度。本文直接以简单的代码示例,如何对MyBatis多数据源配置。准备创建数据库db_testSETNAMESutf8mb4;SETFOREIGN_... 查看详情

第九章springboot+mybatis+多数据源(aop实现)

在第八章springboot+mybatis+多数据源代码的基础上,做两点修改1、ShopDaopackagecom.xxx.firstboot.dao;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.stereotype.Repository;importcom.xxx. 查看详情

springboot+mybatis+druid+pagehelper实现多数据源并分页

前言本篇文章主要讲述的是SpringBoot整合Mybatis、Druid和PageHelper并实现多数据源和分页。其中SpringBoot整合Mybatis这块,在之前的的一篇文章中已经讲述了,这里就不过多说明了。重点是讲述在多数据源下的如何配置使用Druid和PageHelpe... 查看详情

springboot2+druid+mybatis多数据源配置(代码片段)

...案。读写分离会使用多数据源的使用。下面记录如何搭建SpringBoot2+Druid+Mybatis 多数据源配置以及在使用过程遇到的问题。一、先从pom.xml入手(使用springboot2的版本)<parent><groupId>org.springframework.boot&l 查看详情

第九章springboot+mybatis+多数据源(aop实现)(转载)

本编博客转发自:http://www.cnblogs.com/java-zhao/p/5415896.html 1、ShopDaopackagecom.xxx.firstboot.dao;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.stereotype.Rep 查看详情

第八章springboot+mybatis+多数据源

在实际开发中,我们一个项目可能会用到多个数据库,通常一个数据库对应一个数据源。代码结构:简要原理:1)DatabaseType列出所有的数据源的key---key2)DatabaseContextHolder是一个线程安全的DatabaseType容器,并提供了向其中设置和... 查看详情

springboot-mybatis多数据源以及踩坑之旅

首先,springboot项目结构如下springboot配置文件内容如下 动态数据源的配置类如下(必须保证能被ComponentScan扫描到):1packagecom.letzgo.config;23importcom.alibaba.druid.pool.DruidDataSource;4importorg.apache.ibatis.session.SqlSessionFacto 查看详情

springboot实现多数据源整合mybatis版(代码片段)

前言本篇博客只讲如何从零到壹地再SpringBoot项目中实现多数据源配置,不谈源码(后续上SpringBoot自动配置等源码)。本篇博客内容基于SpringBootVersion2.5.1。背景一个项目中需要连接多个数据源,我们需要在业务层... 查看详情

springboot实现多数据源整合mybatis版(代码片段)

前言本篇博客只讲如何从零到壹地再SpringBoot项目中实现多数据源配置,不谈源码(后续上SpringBoot自动配置等源码)。本篇博客内容基于SpringBootVersion2.5.1。背景一个项目中需要连接多个数据源,我们需要在业务层... 查看详情

shardingsphere多数据源(springboot+mybatis+shardingsphere+druid)

org.springframeword.boot:spring-boot-starer-web:2.0.4releaseio.shardingsphere:sharding-jdbc-spring-boot-starter:3.0.0M3org.mybatis.spring.boot:mybatis-spring-boot-starter:1.3.1com.alibaba:druid-spring 查看详情

springboot集成mybatis实现主从(多数据源)分离方案

新建一个Maven项目,最终项目结构如下:多数据源注入到sqlSessionFactoryPOM增加如下依赖:<!--JSON--><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-core</artifactId>< 查看详情