原文:https://www.jianshu.com/p/033e0ebeb617

项目中用到了两个数据库,分别是Oracle和Mysql,涉及到了多数据源问题,这里做下记录
官方讲解:https://github.com/alibaba/druid/tree/master/druid-spring-boot-starter
日志JDBC配置:https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_LogFilter
Druid常见问题汇总:https://github.com/alibaba/druid/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98

配置

  • 首先配置application.yml文件,这里利用阿里的Druid作为连接池,base和follow分别代表主库和从库
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
base:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: oracle.jdbc.driver.OracleDriver
initialize: true #指定初始化数据源,是否用data.sql来初始化,默认: true
name: base
jdbc-url: jdbc:oracle:thin:@189.126.156.396:9522:oratest
username: 用户名
password: 密码
follow:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.jdbc.Driver
initialize: true
name: follow
url: jdbc:mysql://162.66.66.66:3666/paygateway
username: 你的歌用户名
password: 你的密码
---
#下面是分页和日志相关内容,不需要可以删掉
pagehelper:
reasonable: true
helperDialect: oracle
support-methods-arguments: true
params: count=countSql
mybatis:
configuration:
mapUnderscoreToCamelCase: true logging:
level:
com:
xxx:
paygateway:
dao: DEBUG
org:
spring:
springboot:
dao: DEBUG
springframework: WARN
  • 配置主库Configuration,注意prefix前缀和@Primary注解(表示主库)和下划线转驼峰方法的配置
@Configuration
@MapperScan(basePackages = "com.xxx.paygateway.dao.db1", sqlSessionTemplateRef = "baseSqlSessionTemplate")
public class BaseDataSourceConfig {
//这里配置数据源
@Bean(name = "baseDataSource")
@ConfigurationProperties(prefix = "spring.datasource.base")
@Primary
public DataSource setDataSource() {
return DataSourceBuilder.create().build();
} //这里配置事务管理器
@Bean(name = "baseTransactionManager")
@Primary
public DataSourceTransactionManager setTransactionManager(@Qualifier("baseDataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
} //这里配置SqlSessionFactory,连接工厂
@Bean(name = "baseSqlSessionFactory")
@Primary
public SqlSessionFactory setSqlSessionFactory(@Qualifier("baseDataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
//此处配置下划线转驼峰
org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration();
configuration.setMapUnderscoreToCamelCase(true);
bean.setConfiguration(configuration);
bean.setDataSource(dataSource);
//此处配置mybatis扫描路径
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mappers/base/*.xml"));
return bean.getObject();
} //这里配置SqlSessionTemplate,标准操作模板
@Bean(name = "baseSqlSessionTemplate")
@Primary
public SqlSessionTemplate setSqlSessionTemplate(@Qualifier("baseSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
  • 配置从库Configuration,与从库基本一致,注意注解和前缀就可以了
@Configuration
@MapperScan(basePackages = "com.xxx.paygateway.dao.db2", sqlSessionTemplateRef = "fSqlSessionTemplate")
public class FollowDataSourceConfig {
@Bean(name = "fDataSource")
@ConfigurationProperties(prefix = "spring.datasource.follow")
public DataSource setDataSource() {
return new DruidDataSource();
} @Bean(name = "fTransactionManager")
public DataSourceTransactionManager setTransactionManager(@Qualifier("fDataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
} @Bean(name = "fSqlSessionFactory")
public SqlSessionFactory setSqlSessionFactory(@Qualifier("fDataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration();
configuration.setMapUnderscoreToCamelCase(true);
bean.setConfiguration(configuration);
bean.setDataSource(dataSource);
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mappers/follow/*.xml"));
return bean.getObject();
} @Bean(name = "fSqlSessionTemplate")
public SqlSessionTemplate setSqlSessionTemplate(@Qualifier("fSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
  • 把两个数据库的dao层和mapper.xml文件分到不同的文件夹下面,1归1,2归2。service层正常调用即可!

     
    image.png
     
    image.png

作者:后厂村老司机
链接:https://www.jianshu.com/p/033e0ebeb617
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

SpringBoot配置多数据源的更多相关文章

  1. springboot配置Druid数据源

    springboot配置druid数据源 Author:SimpleWu springboot整合篇 前言 对于数据访问层,无论是Sql还是NoSql,SpringBoot默认采用整合SpringDa ...

  2. SpringBoot配置多数据源时遇到的问题

    SpringBoot配置多数据源 参考代码:Spring Boot 1.5.8.RELEASE同时配置Oracle和MySQL 原作者用的是1.5.8版本的SpringBoot,在升级到2.0.*之后 ...

  3. springboot 配置多数据源

    1.首先在创建应用对象时引入autoConfig package com; import org.springframework.boot.SpringApplication; import org. ...

  4. springboot 配置多数据源 good

    1.首先在创建应用对象时引入autoConfig package com; import org.springframework.boot.SpringApplication; import org. ...

  5. springboot配置多数据源mybatis配置失效问题

    mybatis配置 #开启驼峰映射 mybatis.configuration.map-underscore-to-camel-case=true #开启打印sql mybatis.configura ...

  6. springboot配置多数据源(JdbcTemplate方式)

    在实际开发中可能会遇到需要配置多个数据源的情况,比如:需要使用多个host.需要使用多种数据库(MySql.Oracle.SqlServer…) 如果使用springboot开发,可做如下配置: Co ...

  7. SpringBoot配置多数据源Mysql+Sqlite

    ​ 配置了一下druid的多数据源配置,尝试了很多方法,Spring boot关于对Mysql和Sqlite多数据源的配置,记录下来: 涉及技术点: Springboot + Druid + Mysq ...

  8. Springboot配置多数据源(Mysql和Orcale)--(Idea Maven JDBCTemplate支持下的)

    1.配置 orcale jdbc 对于一个Maven项目,使用Mysql时,可直接添加如下依赖: <dependency> <groupId>mysql</groupId ...

  9. springboot配置双数据源 MySQL和SqlServer

    1. pom文件的驱动jar包加上去, compile 'com.microsoft.sqlserver:mssql-jdbc:6.2.2.jre8' 2. application.yml sprin ...

随机推荐

  1. oracle赋某表truncate权限

    一.ins用户下创建存储过程 二.mobapp用户下赋权:执行存储过程的权限 三.odso_insert用户下执行存储过程,即可truncate表 查看odso_insert用户拥有的权限 一.ins ...

  2. springboot创建一个可执行的jar

    让我们通过创建一个完全自包含的可执行jar文件来结束我们的示例,该jar文件可以在生产环境运行.可执行jars(有时候被成为胖jars "fat jars")是包含你的编译后的类和 ...

  3. 【题解】BZOJ 1901: Zju2112 Dynamic Rankings

    题目传送门(权限题) 一道类似的非权限题 题意 N个数的序列,每次修改一个数或者询问区间里的第K小.可以离线. 简要做法 假如要求在线,可以树状数组套个线段树~ 但是这题是可以离线的,就可以乱搞整体二 ...

  4. Eclipse的git插件冲突合并方法

    Eclipse有一个git的插件叫EGit,用于实现本地代码和远程代码对比.合并以及提交.但是在本地代码和远程代码有冲突的时候,EGit的处理方案还是有点复杂.今天就彻底把这些步骤给理清楚,并公开让一 ...

  5. 前端JavaScript高级面试笔记

    一.ES6 1.模块化 ES6通过export和import实现模块化 ES6的模块化的基本规则或特点, 欢迎补充: 1:每一个模块只加载一次, 每一个JS只执行一次, 如果下次再去加载同目录下同文件 ...

  6. Java基础92 MySQL插入当前系统时间

    1.时间格式 用yyyy表示年份(year). -- y  表示年的最后一位,yy 表示年的最后2位,yyy 表示年的最后3位,yyyy 用4位数表示年用MM表示月份(month).-- mm 用2位 ...

  7. pyhton之os.path

    目录结构 file __file__表示了当前文件的path 以相对路径运行:python 1.py 结果:1.py 以绝对路径运行:python F:\python-study\test\1.py ...

  8. SqlServer 批量备份

    -- 实现方式1:使用游标 DECLARE @FileName VARCHAR(200), @CurrentTime VARCHAR(50), @DBName VARCHAR(100), @SQL V ...

  9. CSS------div无法覆盖图片全部如何处理

    如图: 代码:(需要将li中的样式属性display设置为inline-block) //获取Url地址中的参数 function getParameter(name) { //正则表达式 var r ...

  10. PHP函数之trigger_error

    在程序开发中,如果我们编码不规范,比如调用不存在的变量.语法错误.少了个逗号,这些都会引起系统报错并进行提示,但是今天,突然发现PHP还有这样一个函数,用于自动触发一个报错提示,并且会将报错信息写入p ...