在实际项目开发中可能存在需要同时操作两个数据库的场景,比如从A库读取数据,进行操作后往B库中写入数据,此时就需要进行多数据库配置。本文以操作本地和线上的MySQL数据库为例:

MybatislPlus版本可参照官网,进行配置后一个注解就可以解决:MybatisPlust多数据源

Mybatis版本:

1、导入相关pom文件

<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope>
</dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId>
</dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.5</version>
</dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.2.3</version>
</dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>2.0.7</version>
</dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional>
</dependency>

二、application.yml配置文件编写

单数据源的配置如下:

spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://127.0.0.1:3306/meal_order?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8username: rootpassword: roottype: com.alibaba.druid.pool.DruidDataSource

多数据源的配置如下:

spring:datasource:dev:driver-class-name: com.mysql.cj.jdbc.DriverjdbcUrl: jdbc:mysql://xxx.xx.xx.xx:3306/meal_order?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8username: rootpassword: roottype: com.alibaba.druid.pool.DruidDataSourcelocal:driver-class-name: com.mysql.cj.jdbc.DriverjdbcUrl: jdbc:mysql://127.0.0.1:3306/db2021?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8username: rootpassword: roottype: com.alibaba.druid.pool.DruidDataSource

经过对比可以发现:
1、多数据源的配置中需要指定具体的名称来区分不同的数据库(上述配置中的dev和local,名称可以根据具体需求自定义)
2、需要使用jdbcUrl代替url

三、数据库连接配置文件

dev数据源配置文件:

@Configuration
@MapperScan(basePackages = "com.multiple.mapper.dev",sqlSessionFactoryRef = "devSqlSessionFactory")
public class DevDataSourceConfig {@Primary@Bean(name = "devDataSource")@ConfigurationProperties("spring.datasource.dev")public DataSource masterDataSource(){return DataSourceBuilder.create().build();}@Bean(name = "devSqlSessionFactory")public SqlSessionFactory sqlSessionFactory(@Qualifier("devDataSource") DataSource dataSource) throws Exception {SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();sessionFactoryBean.setDataSource(dataSource);sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapping/dev/*.xml"));return sessionFactoryBean.getObject();}
}

local数据源配置文件:

@Configuration
@MapperScan(basePackages = "com.multiple.mapper.local",sqlSessionFactoryRef = "localSqlSessionFactory")
public class LocalDataSourceConfig {@Primary@Bean(name = "localDataSource")@ConfigurationProperties("spring.datasource.local")public DataSource masterDataSource(){return DataSourceBuilder.create().build();}@Bean(name = "localSqlSessionFactory")public SqlSessionFactory sqlSessionFactory(@Qualifier("localDataSource") DataSource dataSource) throws Exception {SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();sessionFactoryBean.setDataSource(dataSource);sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapping/local/*.xml"));return sessionFactoryBean.getObject();}
}

不同配置文件通过@MapperScan注解的内容来区分不同数据库下的mapper文件,通过@ConfigurationProperties注解来加载指定的数据源

以DevDataSourceConfig为例

四、主启动类注解修改

@SpringBootApplication(exclude={DataSourceAutoConfiguration.class})

目录结构如下:

五、测试

从dev库中查询数据,取出字段插入local库中:

public interface DevMapper {@Select("select * from test")List<Test> getAllTest();
}
public interface LocalMapper {@Insert("insert into payment(serial) values (#{name})")int insertMessage(String name);
}
@SpringBootTest
class MultipleDatabaseApplicationTests {@Autowiredprivate DevMapper devMapper;@Autowiredprivate LocalMapper localMapper;@Testvoid contextLoads() {List<com.multiple.pojo.Test> testList = devMapper.getAllTest();for(com.multiple.pojo.Test test : testList){localMapper.insertMessage(test.getAa());}}
}

运行测试代码,从dev库中查出的数据可以成功添加至local库
该方法也适用需要使用多种不同的数据库的场景,比如MySQL和Oracle,修改数据源配置文件即可

SpringBoot+MyBatis项目中同时操作多个数据库相关推荐

  1. WebService CXF系列: SpringBoot同一个项目中集成JaxWS和JaxRS

    WebService CXF系列: SpringBoot同一个项目中集成JaxWS和JaxRS 介绍 项目介绍 项目架构 项目介绍 项目集成的原则 SpringBoot集成JaxWS 1. JaxWs ...

  2. 【EasyExcel】在SpringBoot+VUE项目中引入EasyExcel实现对数据的导出(封装工具类)

    在SpringBoot+VUE项目中引入EasyExcel实现导入导出 一.引入EasyExcel 通过maven引入,坐标如下: <dependency><groupId>c ...

  3. SpringBoot+Vue项目中实现登录验证码校验

    SpringBoot+Vue项目中实现登录验证码校验 在各大项目中,为保证数据的安全性,通常在登录页面加入验证码校验,以防止爬虫带来的数据泄露危机.本文将介绍在前后端分离的项目中,怎样实现图形验证码校 ...

  4. MySQL基本增删改查以及搭配node在项目中的操作

    目录 一.数据库简单介绍 二.进一步了解MySQL 三.安装MySQL并配置 四.使用SQL语句管理数据库 1.SQL语言中的注释 2.SELECT查询语句 3.INSERT INTO插入语句 4.U ...

  5. web项目中保存emoji到mysql数据库

    1.创建utf8mb4的数据库 2.如果导入sql文件,注意修改字段的字符为utf8mb4 3.web项目jdbc连接仍写做utf8 jdbcUrl=jdbc:mysql://localhost/de ...

  6. HTML实现选择数据库字段,django项目中在后台获取了数据库的某一列,如何将其显示在html模板中的select标签内的option选项下?...

    问题描述 不好意的整序大作站对近从体的家为宽应近从体的家思,本人是一个初学者,在尝试用django制作网站的时候遇到了一个问题,网上搜索了很久,苦于没有答案,想请教一下.想要实现的是在前端html里有 ...

  7. SpringBoot+MyBatis+ElementUI中对于时间格式化问题的处理

    场景 在管理系统中,时间的存储.查询.显示的格式往往需要统一. 这就涉及到在数据库中存储时间,使用Mybatis对时间进行比较查询,使用Springboot中的实体类存储查询时间, 使用前端时间选择器 ...

  8. SpringMVC,MyBatis项目中兼容Oracle和MySql的解决方案及其项目环境搭建配置、web项目中的单元测试写法、HttpClient调用post请求等案例

     要搭建的项目的项目结构如下(使用的框架为:Spring.SpingMVC.MyBatis): 2.pom.xml中的配置如下(注意,本工程分为几个小的子工程,另外两个工程最终是jar包): 其中 ...

  9. SpringBoot 读取项目中静态资源文件

    目录 一. ClassPathResource 二. DefaultResourceLoader 三. PathMatchingResourcePatternResolver 四. ResourceU ...

最新文章

  1. redis 系列25 哨兵Sentinel (高可用演示 下)
  2. 工程数据计算机处理的方法有,第二章 CADCAM技术基础-工程数据的计算机处理2011.ppt...
  3. mybatis逆向工程生成的Example类的使用
  4. python产生5个随机数_Python和numpy生成随机数
  5. NOIP2001-普及组复赛-第一题-数的计算
  6. 46 关于Linux的I/O重定向
  7. Tomcat log文件
  8. OpenWrt [mktplinkfw] *** error: images are too big
  9. Spring Boot笔记-接收RabbitMQ队列中的消息
  10. c语言函数简单注释模板,C语言中的Doxygen注释模板
  11. mysql 重置密码 win_window下重置mysql用户密码
  12. 大过年的,程序员在家改bug…
  13. BPSK调制解调的matlab设计和FPGA实现之matlab设计
  14. Java中的反射机制
  15. 基于Vue JS, Webpack 以及Material Design的渐进式web应用 [Part 1]
  16. Web_制作页面开场动画并解决自动播放问题
  17. 安装爱剪辑计算机丢失,爱剪辑没保存的视频怎么恢复?
  18. Linux关闭防火墙和端口号问题
  19. radius系列:freeradius测试
  20. Rsa 非对称加密算法使用问题分享--使用通过密钥对同一段数据加密得到结果每次不一样

热门文章

  1. Google Earth Engine(GEE)——导出表格(csv)和矢量数据
  2. 微信小程序UI组件的推荐以及使用
  3. GPU编程自学10 —— 流并行
  4. IntelliJ IDEA 或者 phpstorm 破解包破解方法
  5. ssm+JSP计算机毕业设计语音管理平台的设计与实现1z50i【源码、程序、数据库、部署】
  6. html显示毒经,谁能肩负剑三PVE王者之名?哪怕职业再强,这点恐怕都比不上毒经...
  7. 俩个模式匹配算法(BMH and shift-Or)
  8. 使用IDEA 刷新项目 清除缓存
  9. 猫的计算机相关的网络语言,喵星人告诉你:2017最火的网络流行语是这些!
  10. (续)Visual Studio 连接SQL Server数据库,代码连接