本文主要介绍如何在一个springboot项目配置两个数据源(mysql和oracle);

1、引进相关依赖

  1. <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
  2. <dependency>
  3. <groupId>mysql</groupId>
  4. <artifactId>mysql-connector-java</artifactId>
  5. <scope>runtime</scope>
  6. </dependency>
  7. <!--oracle 驱动 -->
  8. <dependency>
  9. <groupId>com.oracle</groupId>
  10. <artifactId>ojdbc6</artifactId>
  11. <version>11.1.0.7.0</version>
  12. </dependency>

当ojdbc驱动包版本过低,会报如下图所示错误,即驱动jar与数据库版本不兼容:

2、于applicationContext.yml中配置数据源连接参数:

  1. Spring:
  2. datasource:
  3. base:
  4. driver-class-name: com.mysql.jdbc.Driver
  5. jdbc-url: ${base.db.url}
  6. username: ${base.db.username}
  7. password: ${base.db.password}
  8. oa:
  9. driver-class-name: oracle.jdbc.driver.OracleDriver
  10. jdbc-url: ${oa.db.urL}
  11. username: ${oa.db.username}
  12. password: ${oa.db.password}
  13. hikari:
  14. max-lifetime: 60000
  15. login-timeout: 5
  16. validation-timeout: 3000
  17. connection-timeout: 60000
  18. idle-timeout: 60000

3、多数据源配置文件,读取对应连接参数

  1. Package com.**.config;
  2.  
  3. import org.springframework.beans.factory.annotation.Qualifier;
  4. import org.springframework.boot.context.properties.ConfigurationProperties;
  5. import org.springframework.boot.jdbc.DataSourceBuilder;
  6. import org.springframework.context.annotation.Bean;
  7. import org.springframework.context.annotation.Configuration;
  8. import org.springframework.context.annotation.Primary;
  9. import javax.sql.DataSource;
  10.  
  11. public class MultiDataSourceConfig {
  12.  
  13. @Bean (name = "primaryDataSource")
  14. @Qualifier("primaryDataSource")
  15. @Primary //定义主数据源
  16. @ConfigurationProperties (prefix = "spring.datasource.Base")
  17. public DataSource primaryDataSource () { return DataSourceBuilder.create().build (); }
  18.  
  19. @Bean (name = "secondaryDataSource")
  20. @Qualifier ("secondaryDataSource")
  21. @ConfigurationProperties (prefix = "spring.datasource.oa")
  22. public DataSource secondaryDataSource () { return DataSourceBuilder.create().build (); }
  23.  
  24. }

3、主数据源配置,指定扫描对应mapper文件以及对应xml文件,在使用mapper包下的mapper文件时会自动使用对应sql会话

  1. Package com.**.config;
  2.  
  3. import org.apache.ibatis.session.SqlSessionFactory;
  4. import org.mybatis.spring.SqLSessionFactoryBean;
  5. import org.mybatis.spring.SqLSessionTemplate;
  6. import org.mybatis.spring.annotation.MapperScan;
  7. import org.springframework.beans.factory.annotation.Qualifier;
  8. import org.springframework.context.annotation.Bean;
  9. import org.springframework.context.annotation.Configuration;
  10. import org.springframework.context.annotation.Primary;
  11. import org.springframeworkcore.io.support.PathMatchingResourcePatternResolver;
  12. import org.spr ingframework.jdbc.datasource.DataSourceTransactionManager;
  13. import org.springframework.transaction.PlatformTransactionManager;
  14. import javax.sql.DataSource;
  15.  
  16. @Configuration
  17. @MapperScan (basePackages = "com.**.mapper", sqlSessionTemplateRef = "primarySqlSessionTemplate")
  18. public class SqlSessionTemplate1 {
  19.  
  20. @Bean (name = "primarySqlSessionFactory")
  21. @Primary
  22. public SqlSessionFactory primarySqlSessionFactory (@Qualifier("primaryDataSource") DataSource dataSource)
  23. throws Exception{
  24. SqLSessionFactoryBean bean = new SqlSessionFactoryBean ();
  25. bean.setDataSource (dataSource);
  26. bean.setMapperLocations (new PathMatchingResourcePatternResolver().getResources (locationPattern: "classpath: mybatis/mapper/*. XmL"));
  27. return bean.getObject();
  28. }
  29.  
  30. /**
  31. * 配置声明式事务管理器
  32. */
  33. @Bean (name = "primaryTransactionManager")
  34. @Primary
  35. public PlatformTransactionManager primaryTransactionManager (@Qualifier("primaryDataSource") DataSource dataSource) {
  36. return new DataSourceTransactionManager (dataSource);
  37. }
  38.  
  39. @Bean (name = "primarySqlSessionTemplate")
  40. @Primary
  41. public SqlSessionTemplatel primarySqlSessionTemplate(@Qualifier("primarySqlSesionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
  42. return new SqlSessionTemplatel(sqlSessionFactory);
  43. }
  44. }

4、第二数据源配置,指定扫描对应mapper文件以及对应xml文件,在使用mapper包下的mapper文件时会自动使用对应sql会话

  1. Package com.**.config;
  2.  
  3. import org.apache.ibatis.session.SqlSessionFactory;
  4. import org.mybatis.spring.SqLSessionFactoryBean;
  5. import org.mybatis.spring.SqLSessionTemplate;
  6. import org.mybatis.spring.annotation.MapperScan;
  7. import org.springframework.beans.factory.annotation.Qualifier;
  8. import org.springframework.context.annotation.Bean;
  9. import org.springframework.context.annotation.Configuration;
  10. import org.springframework.context.annotation.secondary;
  11. import org.springframeworkcore.io.support.PathMatchingResourcePatternResolver;
  12. import org.spr ingframework.jdbc.datasource.DataSourceTransactionManager;
  13. import org.springframework.transaction.PlatformTransactionManager;
  14. import javax.sql.DataSource;
  15.  
  16. @Configuration
  17. @MapperScan (basePackages = "com.**.oraclemapper", sqlSessionTemplateRef = "secondarySqlSessionTemplate")
  18. public class SqlSessionTemplate2 {
  19.  
  20. @Bean (name = "secondarySqlSessionFactory")
  21. public SqlSessionFactory secondarySqlSessionFactory (@Qualifier("secondaryDataSource") DataSource dataSource)
  22. throws Exception{
  23. SqLSessionFactoryBean bean = new SqlSessionFactoryBean ();
  24. bean.setDataSource (dataSource);
  25. bean.setMapperLocations (new PathMatchingResourcePatternResolver().getResources (locationPattern: "classpath: mybatis/oraclemapper/*. XmL"));
  26. return bean.getObject();
  27. }
  28.  
  29. /**
  30. * 配置声明式事务管理器
  31. */
  32. @Bean (name = "secondaryTransactionManager")
  33. public PlatformTransactionManager secondaryTransactionManager (@Qualifier("secondaryDataSource") DataSource dataSource) {
  34. return new DataSourceTransactionManager (dataSource);
  35. }
  36.  
  37. @Bean (name = "secondarySqlSessionTemplate")
  38. public SqlSessionTemplatel secondarySqlSessionTemplate(@Qualifier("secondarySqlSesionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
  39. return new SqlSessionTemplatel(sqlSessionFactory);
  40. }
  41. }

至此,在service层可以像单数据源一样使用了。

springboot —— 多数据源的更多相关文章

  1. Spring-Boot配置文件数据源配置项

    Spring-Boot配置文件数据源配置项(常用配置项为红色) 参数 介绍 spring.datasource.continue-on-error = false 初始化数据库时发生错误时,请勿停止 ...

  2. SpringBoot多数据源动态切换数据源

    1.配置多数据源 spring: datasource: master: password: erp_test@abc url: jdbc:mysql://127.0.0.1:3306/M201911 ...

  3. SpringBoot学习笔记(三):SpringBoot集成Mybatis、SpringBoot事务管理、SpringBoot多数据源

    SpringBoot集成Mybatis 第一步我们需要在pom.xml里面引入mybatis相关的jar包 <dependency> <groupId>org.mybatis. ...

  4. 搞定SpringBoot多数据源(1):多套源策略

    目录 1. 引言 2. 运行环境 3. 多套数据源 3.1 搭建 Spring Boot 工程 3.1.1 初始化 Spring Boot 工程 3.1.2 添加 MyBatis Plus 依赖 3. ...

  5. 搞定SpringBoot多数据源(2):动态数据源

    目录 1. 引言 2. 动态数据源流程说明 3. 实现动态数据源 3.1 说明及数据源配置 3.1.1 包结构说明 3.1.2 数据库连接信息配置 3.1.3 数据源配置 3.2 动态数据源设置 3. ...

  6. 搞定SpringBoot多数据源(3):参数化变更源

    目录 1. 引言 2. 参数化变更源说明 2.1 解决思路 2.2 流程说明 3. 实现参数化变更源 3.1 改造动态数据源 3.1.1 动态数据源添加功能 3.1.2 动态数据源配置 3.2 添加数 ...

  7. SpringBoot多数据源:动态数据源

    目录 1. 引言 2. 动态数据源流程说明 3. 实现动态数据源 3.1 说明及数据源配置 3.1.1 包结构说明 3.1.2 数据库连接信息配置 3.1.3 数据源配置 3.2 动态数据源设置 3. ...

  8. Springboot 多数据源配置,结合tk-mybatis

    一.前言 作为一个资深的CRUD工程师,我们在实际使用springboot开发项目的时候,难免会遇到同时使用多个数据库的情况,比如前脚刚查询mysql,后脚就要查询sqlserver. 这时,我们很直 ...

  9. springBoot多数据源(不同类型数据库)项目

    一个基于springboot的多数据源(mysql.sqlserver)项目,先看看项目结构,注意dao层 多数据源mysql配置代码: package com.douzi.robotcenter.c ...

  10. springboot 双数据源+aop动态切换

    # springboot-double-dataspringboot-double-data 应用场景 项目需要同时连接两个不同的数据库A, B,并且它们都为主从架构,一台写库,多台读库. 多数据源 ...

随机推荐

  1. 201621123018《java程序设计》第12周作业总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 面向系统综合设计-图书馆管理系统或购物车 使用流与文件改造你的图书馆管理系统或购物车. 2.1 简述如何 ...

  2. JQuery - on绑定多个事件

    一.jquery为多个选择器绑定同一个事件 $("#start,#end").on("click",function(){ alert("The pa ...

  3. 31_网络编程-struct

    一.struct   1.简述  我们可以借助一个模块,这个模块可以把要发送的数据长度转换成固定长度的字节.这样客户端每次接收消息之前只要先接受这个固定长度字节的内容看一看接下来要接收的信息大小,那么 ...

  4. ajaxsubmit 上传文件 在IE中返回的内容 提示下载文件

    在ajaxSubmit提交表单的时候,如果表单内有文件上传的话,会判断参数是否配置的iframe为false参数,如果没有,会用创建隐藏iframe方式提交表单,如果设定了iframe为false,则 ...

  5. hander消息机制原理(looper轮询监听机制)

    基本原理 线程中调用Handler.sendMsg()方法(参数是Message对象),将需要Main线程处理的事件 添加到Main线程的MessageQueue中,Main线程通过MainLoope ...

  6. windows系统numpy的下载与安装教程

    numpy是一款基于python的功能强大的科学计算包.要安装numpy首先你得先安装python.python的安装非常简单,本人安装的是python3.4. 工具/原料 安装好的python程序 ...

  7. 解释一下核主成分分析(Kernel Principal Component Analysis, KPCA)的公式推导过程(转载)

    KPCA,中文名称”核主成分分析“,是对PCA算法的非线性扩展,言外之意,PCA是线性的,其对于非线性数据往往显得无能为力,例如,不同人之间的人脸图像,肯定存在非线性关系,自己做的基于ORL数据集的实 ...

  8. Choose GitLab for your next open source project

    原文:https://b.agilob.net/choose-gitlab-for-your-next-project/ GitLab.com is a competitor of GIthub. I ...

  9. Maven启用代理服务器访问

    0.什么叫代理服务器? 代理服务器英文全称是(Proxy Server),其功能就是代理网络用户去取得网络信息.形象的说:它是网络信息的中转站. 代理服务器就好象一个大的Cache,这样就能显著提高浏 ...

  10. ES6常用语法总结

    ECMAScript 6(以下简称ES6)是JavaScript语言的下一代标准.因为当前版本的ES6是在2015年发布的,所以又称ECMAScript 2015.也就是说,ES6就是ES2015.虽 ...