一、分包方式实现:

1、在application.properties中配置两个数据库:

#druid连接池
#dataSoureOne(这里是我本地的数据源)
spring.datasource.one.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.one.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.one.jdbc-url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC
spring.datasource.one.username=root
spring.datasource.one.password=root

#dataSoureTwo(这里是我们服务器的数据源)
spring.datasource.two.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.two.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.two.jdbc-url=jdbc:mysql://xx.xxx.xx.xxx:3306/kds_master_info?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC
spring.datasource.two.username=root
spring.datasource.two.password=KDSmaster123

2、建立连个数据源的配置文件:

注意下面DataSource包引入的是import javax.activation.DataSource;

@Configuration
// 配置mybatis的接口类放的地方
@MapperScan(basePackages = "com.example.mybatis.mapper",sqlSessionFactoryRef = "sqlSessionFactoryOne")
public class DataSourceConfigOne { @Bean(name = "dataSourceOne")
@Primary// 表示这个数据源是默认数据源
// 读取application.properties中的配置参数映射成为一个对象,prefix表示参数的前缀
@ConfigurationProperties(prefix = "spring.datasource.one")
public DataSource dataSourceOne() {
return DataSourceBuilder.create().build();
} @Bean(name = "sqlSessionFactoryOne")
@Primary
public SqlSessionFactory sqlSessionFactoryOne(@Qualifier("dataSourceOne") DataSource datasource)throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(datasource);
bean.setMapperLocations(
// 设置mybatis的xml所在位置
new PathMatchingResourcePatternResolver().getResources("classpath:mapper/*.xml"));
  bean.getObject().getConfiguration().setMapUnderscoreToCamelCase(true);
return bean.getObject();
} @Primary
public SqlSessionTemplate sqlsessiontemplateOne(@Qualifier("sqlsessiontemplateOne") SqlSessionFactory sessionfactory) {
return new SqlSessionTemplate(sessionfactory);
}
}
@Configuration
@MapperScan(basePackages = "com.example.mybatis.mapper2",sqlSessionFactoryRef = "sqlSessionFactoryTwo")
public class DataSourceConfigTwo {
@Bean(name = "dataSourceTwo")
// 读取application.properties中的配置参数映射成为一个对象,prefix表示参数的前缀
@ConfigurationProperties(prefix = "spring.datasource.two")
public DataSource dataSourceTwo() {
return DataSourceBuilder.create().build();
} @Bean(name = "sqlSessionFactoryTwo")
public SqlSessionFactory sqlSessionFactoryTwo(@Qualifier("dataSourceTwo") DataSource datasource)throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource((javax.sql.DataSource) datasource);
bean.setMapperLocations(
// 设置mybatis的xml所在位置
new PathMatchingResourcePatternResolver().getResources("classpath:mapper2/*.xml"));
  bean.getObject().getConfiguration().setMapUnderscoreToCamelCase(true);

return bean.getObject();
} public SqlSessionTemplate sqlsessiontemplateTwo(@Qualifier("sqlsessiontemplateTwo") SqlSessionFactory sessionfactory) {
return new SqlSessionTemplate(sessionfactory);
}
}

注意:

1、@Primary这个注解必须要加,因为不加的话spring将分不清楚那个为主数据源(默认数据源)

2、mapper的接口、xml形式以及dao层都需要两个分开,目录如图:

3、bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(“XXXX”));

mapper的xml形式文件位置必须要配置,不然将报错:no statement (这种错误也可能是mapper的xml中,

namespace与项目的路径不一致导致的)

4、在service层中根据不同的业务注入不同的dao层:

5.开始我启动项目并访问接口会报错,查看了半小时才发现,是下划线与驼峰映射失败,这个要在

sqlSessionFactoryOne和sqlSessionFactoryTwo里面添加一行 bean.getObject().getConfiguration().setMapUnderscoreToCamelCase(true);

才可以,然后继续访问,又报错Failed to obtain JDBC Connection; nested exception is com.mysql.jdbc.exceptions.jdbc4.

CommunicationsException: Communications link failure.

后来查询得知,要在上面的数据库连接url中将&useSSL=true改为&useSSL=false

最后测试一下,两个数据库userInfo和user表的数据都显示出来了:

userInfo:

user:

最后还有一个错误忘了补充,在这里补充一下,我的springboot是2.x版本,在配置单个数据源

时候,数据库连接的url是spring.datasource.url=xxx,这样没有问题,但是在配置多数据源的时候

spring.datasource.one.url和spring.datasource.two.url会报错jdbcUrl is required with driverClassName.

将spring.datasource.one.url和spring.datasource.two.url中的url改成spring.datasource.one.jdbc-url,

也就是将url改成jdbc-url即可。

springboot+mybais配置多数据源(分包实现)的更多相关文章

  1. SpringBoot+MyBatis配置多数据源

    SpringBoot 可以支持多数据源,这是一个非常值得学习的功能,但是从现在主流的微服务的架构模式中,每个应用都具有唯一且准确的功能,多数据源的需求很难用到,考虑到实际情况远远比理论复杂的多,这里还 ...

  2. springboot + mybatis配置多数据源示例

    转:http://www.jb51.net/article/107223.htm 在实际开发中,我们一个项目可能会用到多个数据库,通常一个数据库对应一个数据源. 代码结构: 简要原理: 1)Datab ...

  3. SpringBoot MyBatis 配置多数据源 (静态多个)

    转载地址:https://www.jianshu.com/p/118ca1d5ecf9?utm_campaign=haruki&utm_content=note&utm_medium= ...

  4. springboot下配置多数据源

    摘自: http://blog.csdn.net/wangqingqi20005/article/details/52613055

  5. 配置 Druid 数据源及密码加密-SpringBoot 2.7 实战基础

    在SpringBoot中配置 Druid 数据源及密码加密的方法 前文集成 MyBatis Plus,实现了一组增删改查接口.在启动服务时,从控制台中可以看出 Spring Boot 默认使用 Hik ...

  6. springboot 配置多数据源

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

  7. springboot配置Druid数据源

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

  8. SpringBoot系列七:SpringBoot 整合 MyBatis(配置 druid 数据源、配置 MyBatis、事务控制、druid 监控)

    1.概念:SpringBoot 整合 MyBatis 2.背景 SpringBoot 得到最终效果是一个简化到极致的 WEB 开发,但是只要牵扯到 WEB 开发,就绝对不可能缺少数据层操作,所有的开发 ...

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

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

  10. SpringBoot整合MyBatisPlus配置动态数据源

    目录 SpringBoot整合MyBatisPlus配置动态数据源 SpringBoot整合MyBatisPlus配置动态数据源 推文:2018开源中国最受欢迎的中国软件MyBatis-Plus My ...

随机推荐

  1. jquery实现多图片上传

    在做后台管理的时候,遇到这样一个需求,实现多张图片上传并按选中的顺序显示.PS:图片上传的时候是即时上传到服务器,后台返回图片在服务器上的地址,在最后点击提交按钮的时候,把地址传给后端写入数据库即可. ...

  2. pgbouncer相关概念和使用

    pgbouncer相关概念和使用 1.pgbouncer介绍   PG 是多进程结构,每新增一个会话就会新增一个进程,相对而言对数据库的开销就会比较巨大.   因为在正常业务会话中,有不少sessio ...

  3. xpath拉取链家二手房信息并保存到excel中

    import os.path import requests from lxml import etree import xlwt import xlrd def create_excel(): if ...

  4. Springboot+Vue实现短信与邮箱验证码登录

    体验网址:http://mxyit.com 示例 1.新增依赖 <!-- 短信服务 --> <dependency> <groupId>com.aliyun< ...

  5. AC间二层漫游

    这个实验没有找到用packet tracer做的例子,故使用ensp,参考了文章: 配置WLAN AC间二层漫游示例 - WLAN V200R008C10 典型配置案例集 - 华为 (huawei.c ...

  6. 「postOI」以另一种方式证明 FWT

    记号 \(\otimes\) 代表或/与/异或卷积: \(\oplus\) 代表"拼接",例如 \(A\oplus B\) 即将 \(B\) 接在 \(A\) 的后面: \(+,- ...

  7. react native 状态栏和安全区域的使用

    1.  状态栏组件,react native文档提供了说明.我需要的是设置透明效果,如下图. 代码如下 <StatusBar translucent={true} backgroundColor ...

  8. linux中用crontab定时任务启动jar无效

    修改前脚本内容如下: #!/bin/bash nohup java -Xms512m -Xmx512m -jar /opt/jar/xx-0.0.1-SNAPSHOT.jar & 检查了各方面 ...

  9. uniapp支付返回form

    在项目中,支付功能是一个常见的功能,调用支付宝时,后段给我们的是一个form的富文本内容 这时需要把form到页面渲染,方法如下: uni.request({ //仅为示例,并非真实接口地址. url ...

  10. 《__cplusplus修饰符的作用:C和CPP接口互相调用时候,编译没问题,链接提示未定义问题》

    关于__cplusplus修饰符说明如下: __cplusplus是cpp中的自定义宏,那么定义了这个宏的话表示这是一段cpp的代码,也就是说,上面的代码的含义是:如果这是一段cpp的代码,那么加入e ...