pringBoot和Mybatis配置多数据源连接多个数据库
目前业界操作数据库的框架一般是 Mybatis,但在很多业务场景下,我们需要在一个工程里配置多个数据源来实现业务逻辑。在SpringBoot中也可以实现多数据源并配合Mybatis框架编写xml文件来执行SQL。在SpringBoot中,配置多数据源的方式十分便捷,

下面开始上代码:

在pom.xml文件中需要添加一些依赖

org.mybatis.spring.boot mybatis-spring-boot-starter 1.2.0 mysql mysql-connector-java 5.1.39 com.alibaba druid 1.0.18 application.properties 配置两个数据源配置 # master 数据源配置 master.datasource.url=jdbc:mysql://localhost:3306/springbootdb?useUnicode=true&characterEncoding=utf8 master.datasource.username=root master.datasource.password=321 master.datasource.driverClassName=com.mysql.jdbc.Driver

second 数据源配置

second.datasource.url=jdbc:mysql://localhost:3306/springbootdb_second?useUnicode=true&characterEncoding=utf8
second.datasource.username=root
second.datasource.password=321
second.datasource.driverClassName=com.mysql.jdbc.Driver
数据源配置
多数据源配置的时候注意,必须要有一个主数据源,即 MasterDataSourceConfig 配置
@Primary 标志这个 Bean 如果在多个同类 Bean 候选时,该 Bean 优先被考虑。「多数据源配置的时候注意,必须要有一个主数据源,用 @Primary 标志该 Bean
@MapperScan 扫描 Mapper 接口并容器管理,包路径精确到 master,为了和下面 cluster 数据源做到精确区分
@Value 获取全局配置文件 application.properties 的 kv 配置,并自动装配sqlSessionFactoryRef 表示定义了 key ,表示一个唯一 SqlSessionFactory 实例
MasterDataSourceConfig的代码:

@Configuration
// 扫描 Mapper 接口并容器管理
@MapperScan(basePackages = MasterDataSourceConfig.PACKAGE, sqlSessionFactoryRef = “masterSqlSessionFactory”)
public class MasterDataSourceConfig {

// 精确到 master 目录,以便跟其他数据源隔离
static final String PACKAGE = "org.spring.springboot.dao.master";
static final String MAPPER_LOCATION = "classpath:mapper/master/*.xml";@Value("${master.datasource.url}")
private String url;@Value("${master.datasource.username}")
private String user;@Value("${master.datasource.password}")
private String password;@Value("${master.datasource.driverClassName}")
private String driverClass;@Bean(name = "masterDataSource")
@Primary
public DataSource masterDataSource() {DruidDataSource dataSource = new DruidDataSource();dataSource.setDriverClassName(driverClass);dataSource.setUrl(url);dataSource.setUsername(user);dataSource.setPassword(password);return dataSource;
}@Bean(name = "masterTransactionManager")
@Primary
public DataSourceTransactionManager masterTransactionManager() {return new DataSourceTransactionManager(masterDataSource());
}@Bean(name = "masterSqlSessionFactory")
@Primary
public SqlSessionFactory masterSqlSessionFactory(@Qualifier("masterDataSource") DataSource masterDataSource)throws Exception {final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();sessionFactory.setDataSource(masterDataSource);sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(MasterDataSourceConfig.MAPPER_LOCATION));return sessionFactory.getObject();
}

}
第二个数据源SecondDataSourceConfig的配置如下:

@Configuration
// 扫描 Mapper 接口并容器管理
@MapperScan(basePackages = SecondDataSourceConfig.PACKAGE, sqlSessionFactoryRef = “secondSqlSessionFactory”)
public class SecondDataSourceConfig {

// 精确到 cluster 目录,以便跟其他数据源隔离
static final String PACKAGE = "com.springboot.dao.second";
static final String MAPPER_LOCATION = "classpath:mapper/second/*.xml";@Value("${second.datasource.url}")
private String url;@Value("${second.datasource.username}")
private String user;@Value("${second.datasource.password}")
private String password;@Value("${second.datasource.driverClassName}")
private String driverClass;@Bean(name = "secondDataSource")
public DataSource clusterDataSource() {DruidDataSource dataSource = new DruidDataSource();dataSource.setDriverClassName(driverClass);dataSource.setUrl(url);dataSource.setUsername(user);dataSource.setPassword(password);return dataSource;
}@Bean(name = "secondTransactionManager")
public DataSourceTransactionManager clusterTransactionManager() {return new DataSourceTransactionManager(clusterDataSource());
}@Bean(name = "secondSqlSessionFactory")
public SqlSessionFactory clusterSqlSessionFactory(@Qualifier("secondDataSource") DataSource clusterDataSource)throws Exception {final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();sessionFactory.setDataSource(clusterDataSource);sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(SecondDataSourceConfig.MAPPER_LOCATION));return sessionFactory.getObject();
}

}
到此,不同的数据源配置就已经完成,剩下的只需要将将Mybatis的xml文件和DAO层的接口写好,并在Service层注入,直接使用就行。

Service层的代码:

@Service
public class UserServiceImpl implements UserService {

@Autowired
private UserDao userDao;
@Autowired
private SchoolDao schoolDao;public UserVo getUser(Long id) {UserVo userVo = userDao.findById(id);SchoolVo schoolVo = schoolDao.findByName("清华");userVo.setSchoolVo(schoolVo);return userVo;
}

}
Mybatis的xml文件UserDao.xml和SchoolDao.xml的内容:

UserDao.xml

<?xml version="1.0" encoding="UTF-8" ?>

<sql id="Base_Column_List">id, user_name
</sql><select id="findById" resultMap="BaseResultMap" parameterType="java.lang.Long">select<include refid="Base_Column_List" />fromuserwhereid = #{id}
</select>

SchoolDao.xml

<?xml version="1.0" encoding="UTF-8" ?>

<sql id="Base_Column_List">id, school_name, school_describe
</sql><select id="findByName" resultMap="BaseResultMap" parameterType="java.lang.String">select<include refid="Base_Column_List" />fromschoolwhereschool_name = #{schoolName}
</select>

TestController

@Controller
@RequestMapping(value = “/api/v1/test”)
public class TestController {

@Autowired
private UserService userService;@RequestMapping(value = "/getUser")
@ResponseBody
public UserVo getUser(@RequestParam(value = "id") Long id) {return userService.getUser(id);
}

}
创建数据库和表SQL:

CREATE DATABASE springbootdb;

CREATE DATABASE springbootdb_second;

CREATE TABLE user (
id int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT ‘用户编号’,
user_name varchar(25) DEFAULT NULL COMMENT ‘用户名称’,
description varchar(25) DEFAULT NULL COMMENT ‘描述’,
PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8

CREATE TABLE school (
id bigint(20) NOT NULL,
school_name varchar(64) DEFAULT NULL COMMENT ‘学校名’,
school_describe varchar(128) DEFAULT NULL COMMENT ‘学校描述’,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

insert into springbootdb.user ( user_name, description) values ( ‘shuai’, ‘so handsome’);

insert into springbootdb_second.school ( id, school_name, school_describe) values ( ‘1’, ‘清华’, ‘自强不息,厚德载物’);
创建好数据后,整个工程的机构如下:

启动程序,在浏览器输入:http://localhost:8080/api/v1/test/getUser?id=1即可返回结果。

工程结构.png

作者:ChinaXieShuai
链接:https://www.jianshu.com/p/735852145580
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

mysql多数据源配置相关推荐

  1. do与mysql数据类型对照_dophon-db: dophon框架的数据库模块,支持mysql,sqlite数据库,带有orm持久化功能与链式操作实例,贴近逻辑习惯,支持mysql多数据源配置...

    dophon-db 项目介绍 dophon框架的数据库模块,也可单独作为一个与数据库模块交互的部件 支持mysql数据库连接 支持orm形式的数据操作 如有疑问请发送邮件联系作者:ealohu@163 ...

  2. 使用springboot + druid + mybatisplus完成多数据源配置

    一. 简介 1. 版本 springboot版本为2.0.3.RELEASE,mybatisplus版本为2.1.9, druid版本为1.1.9,swagger版本为2.7.0 2. 项目地址   ...

  3. c3p0数据源配置抛出Could not load driverClass com.mysql.jdbc.Driver的解决方案

    c3p0数据源配置抛出Could not load driverClass com.mysql.jdbc.Driver的解决方案 参考文章: (1)c3p0数据源配置抛出Could not load ...

  4. mysql druid 多数据源_SpringBoot使用阿里数据库连接池Druid以及多数据源配置

    SpringBoot使用阿里数据库连接池Druid以及多数据源配置 引入依赖 com.alibaba druid 1.0.29 数据源配置 1.数据源 #master数据源 spring.dataso ...

  5. spring boot多数据源配置(mysql,redis,mongodb)实战

    使用Spring Boot Starter提升效率 虽然不同的starter实现起来各有差异,但是他们基本上都会使用到两个相同的内容:ConfigurationProperties和AutoConfi ...

  6. 润乾报表配置mysql数据源_润乾报表在proxool应用下的数据源配置

     大多数应用会使用proxool数据连接池,proxool.xml的配置文件如下: db jdbc:mysql://×××.×××.××.×××:3303/mydb com.mysql.jdbc. ...

  7. .net odbc连接mysql数据库,下载安装MySQL数据库ODBC驱动和配置MySQL ODBC数据源

    1. 下载MySQL ODBC驱动: 打开的页面如下图所示,可根据实际使用情况选择下载相应的MSI安装程序,使用Visual C++ 6.0环境编程请下载32位MSI安装程序. 点击下载后出现如下页面 ...

  8. boot jndi数据源 spring_spring boot多数据源配置(mysql,redis,mongodb)实战

    使用Spring Boot Starter提升效率 虽然不同的starter实现起来各有差异,但是他们基本上都会使用到两个相同的内容:ConfigurationProperties和AutoConfi ...

  9. mysql 多数据源访问_通过Spring Boot配置动态数据源访问多个数据库的实现代码

    之前写过一篇博客<Spring+Mybatis+Mysql搭建分布式数据库访问框架>描述如何通过Spring+Mybatis配置动态数据源访问多个数据库.但是之前的方案有一些限制(原博客中 ...

最新文章

  1. 离不开的“微服务”架构,脱不开的RPC细节(收藏)
  2. python爬携程_python爬虫-携程-eleven参数
  3. GitHub轻松阅读微服务实战项目流程详解【第一天:数据库表设计及其环境搭建、项目运行】
  4. C# this关键字的3种用法
  5. 【零基础学Java】—对象的内存图(八)
  6. 开源软件冲破云霄,“机智号”直升机首飞成功,还带来了第一个火星机场!...
  7. Google Chrome 工程师:JavaScript 不容错过的八大优化建议
  8. python设置excel格式_Python使用xlwt写excel并设置写入格式
  9. html网页表单设计实验报告,网页设计实验报告(学生).doc
  10. ionic html5 上传图片,ionic文件选择与ionic文件上传
  11. 如何用Android Stuido 调用百度翻译的API
  12. Ubuntu设置PPPoE拨号上网
  13. protal认证的稳定性测试脚本
  14. ChinaSoft 论坛巡礼 | 服务生态系统的构建、运维与演化
  15. 浙江大学 工程伦理 第十二单元测试答案
  16. python中*args和**kargs得用法总结
  17. 用树莓派做电视盒子,安装Android TV系统
  18. 什么叫别让孩子输在起跑线上?! - 电子产品已成儿童“多动症”诱因
  19. springboot整合ehcache使用
  20. vim复制粘贴的命令

热门文章

  1. Numpy学习笔记(七)数学函数
  2. 鲁大师11月新机排行:只有5款机型发布,OPPO撑起榜单
  3. 煤化工工控网络安全解决方案 第一部分
  4. Genymotion模拟器的安装和使用
  5. linux安装frps服务,Debian手动搭建frps服务端
  6. Jetpack 架构组件:Room 数据库应用
  7. SAP 标准成本、计划成本、目标成本、实际成本计算公式
  8. k8s 的容器command用法相关
  9. floor()函数与round()函数
  10. (四)AR Foundation实现坐标、图片检测(上)