【前言】

最近接到一个新需求,经过分析后做了相应的设计;其中需要在一个项目中操做不同的数据源;于是进行了相关验证;在此记录一下验证过程。

【实战多数据源】

         一、Pom中引入相应的Jar包

<!-- mysql 基础服务-->
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.39</version>
</dependency><!-- mybatis -->
<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>1.3.2</version>
</dependency>

         二、主要代码展示

1、application.properties增加数据库连接的相关配置

#****************************用户数据库***************************
user.datasource.url=jdbc:mysql://127.0.0.1:3306/zh_user?useUnicode=true&zeroDateTimeBehavior=convertToNull&characterEncoding=UTF-8
user.datasource.username=root
user.datasource.password=root
user.datasource.connectionTimeout=30000
user.datasource.idleTimeout=600000
user.datasource.maxLifetime=1800000
user.datasource.maximumPoolSize=10
user.datasource.minimumIdle=5
#****************************订单数据库***************************
order.datasource.url=jdbc:mysql://127.0.0.1:3306/zh_order?useUnicode=true&zeroDateTimeBehavior=convertToNull&characterEncoding=UTF-8
order.datasource.username=root
order.datasource.password=root
order.datasource.connectionTimeout=30000
order.datasource.idleTimeout=600000
order.datasource.maxLifetime=1800000
order.datasource.maximumPoolSize=10
order.datasource.minimumIdle=5

2、启动类中排除DataSourceAutoConfiguration和MybatisAutoConfiguration

package com.zhanghan.zhboot;import org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class,MybatisAutoConfiguration.class})
public class ZhBootApplication {public static void main(String[] args) {SpringApplication.run(ZhBootApplication.class, args);}}

3、数据库属性读取类(以UserDataSourceProperties为例)

package com.zhanghan.zhboot.properties;import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;@Component
@Data
@ConfigurationProperties(prefix = "user.datasource")
public class UserDataSourceProperties {private String url;private String username;private String password;private Integer connectionTimeout;private Integer idleTimeout;private Integer maxLifetime;private Integer maximumPoolSize;private Integer minimumIdle;}

4、数据源配置器(以UserDataSourceConfig为例)---注:数据库连接池用的是springboot2.0后默认的hikariCP(性能高)

package com.zhanghan.zhboot.config;import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import com.zhanghan.zhboot.properties.UserDataSourceProperties;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;import javax.sql.DataSource;@Configuration
// 扫描 Mapper 接口并容器管理
@MapperScan(basePackages = UserDataSourceConfig.PACKAGE, sqlSessionFactoryRef = "userSqlSessionFactory")
public class UserDataSourceConfig {static final String PACKAGE = "com.zhanghan.zhboot.mybatis.mapper.user";@Autowiredprivate UserDataSourceProperties userDataSourceProperties;@Bean(name = "userDataSource")public DataSource userDataSource() {HikariConfig config = new HikariConfig();config.setJdbcUrl(userDataSourceProperties.getUrl());config.setUsername(userDataSourceProperties.getUsername());config.setPassword(userDataSourceProperties.getPassword());config.setConnectionTestQuery("select 1");config.setConnectionTimeout(userDataSourceProperties.getConnectionTimeout());config.setIdleTimeout(userDataSourceProperties.getIdleTimeout());config.setMaxLifetime(userDataSourceProperties.getMaxLifetime());config.setMaximumPoolSize(userDataSourceProperties.getMaximumPoolSize());config.setMinimumIdle(userDataSourceProperties.getMinimumIdle());return new HikariDataSource(config);}@Bean(name = "userTransactionManager")public DataSourceTransactionManager userTransactionManager() {return new DataSourceTransactionManager(userDataSource());}@Bean(name = "userSqlSessionFactory")public SqlSessionFactory userSqlSessionFactory(@Qualifier("userDataSource") DataSource userDataSource)throws Exception {final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();sessionFactory.setDataSource(userDataSource);return sessionFactory.getObject();}
}

5、相应的mapper文件

package com.zhanghan.zhboot.mybatis.mapper.user;import com.zhanghan.zhboot.mybatis.entity.UserInfoEntity;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.type.JdbcType;@Mapper
public interface UserInfoMapper {@Select({"select","id, no, mobile, name, sex, create_time, update_time, param1, param2, param3, ","param4, param5, param6","from user_info","where mobile = #{mobile,jdbcType=VARCHAR}","limit 1"})@Results({@Result(column="id", property="id", jdbcType= JdbcType.BIGINT, id=true),@Result(column="no", property="no", jdbcType=JdbcType.VARCHAR),@Result(column="mobile", property="mobile", jdbcType=JdbcType.VARCHAR),@Result(column="name", property="name", jdbcType=JdbcType.VARCHAR),@Result(column="sex", property="sex", jdbcType=JdbcType.INTEGER),@Result(column="create_time", property="createTime", jdbcType=JdbcType.TIMESTAMP),@Result(column="update_time", property="updateTime", jdbcType=JdbcType.TIMESTAMP),@Result(column="param1", property="param1", jdbcType=JdbcType.INTEGER),@Result(column="param2", property="param2", jdbcType=JdbcType.INTEGER),@Result(column="param3", property="param3", jdbcType=JdbcType.INTEGER),@Result(column="param4", property="param4", jdbcType=JdbcType.VARCHAR),@Result(column="param5", property="param5", jdbcType=JdbcType.VARCHAR),@Result(column="param6", property="param6", jdbcType=JdbcType.VARCHAR)})UserInfoEntity findByMobile(String mobile);
}

6、相应的Service

package com.zhanghan.zhboot.service.impl;import com.zhanghan.zhboot.controller.request.OrderRequest;
import com.zhanghan.zhboot.mybatis.entity.OrderInfoEntity;
import com.zhanghan.zhboot.mybatis.entity.UserInfoEntity;
import com.zhanghan.zhboot.mybatis.mapper.order.OrderInfoMapper;
import com.zhanghan.zhboot.mybatis.mapper.user.UserInfoMapper;
import com.zhanghan.zhboot.service.OrderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;@Service
public class OrderServiceImpl implements OrderService {@Autowiredprivate UserInfoMapper userInfoMapper;@Autowiredprivate OrderInfoMapper orderInfoMapper;@Overridepublic Object findOrder(OrderRequest orderRequest) {UserInfoEntity userInfoEntity = userInfoMapper.findByMobile(orderRequest.getMobile());if (ObjectUtils.isEmpty(userInfoEntity)) {return null;}OrderInfoEntity orderInfoEntity = orderInfoMapper.findByUserNo(userInfoEntity.getNo());return orderInfoEntity;}
}

7、相应的Controller

package com.zhanghan.zhboot.controller;import com.zhanghan.zhboot.controller.request.OrderRequest;
import com.zhanghan.zhboot.service.OrderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;@RestController
public class OrderController {@Autowiredprivate OrderService orderService;@RequestMapping(value = "/get/order/borrow", method = RequestMethod.POST)public Object getOrderBorrow(@RequestBody OrderRequest orderRequest) {return orderService.findOrder(orderRequest);}
}

         三、效果图

        五、项目地址及代码版本

1、地址:https://github.com/dangnianchuntian/springboot

2、代码版本:1.0.0-Release

【总结】

1、实践出真知;

2、技术是为业务服务;

SpringBoot实战(三):整合Mybatis配置多数据源相关推荐

  1. SpringBoot 实战 (九) | 整合 Mybatis

    微信公众号:一个优秀的废人 如有问题或建议,请后台留言,我会尽力解决你的问题. 前言 如题,今天介绍 SpringBoot 与 Mybatis 的整合以及 Mybatis 的使用,本文通过注解的形式实 ...

  2. SpringBoot实战之整合WebSocket之群聊

    SpringBoot实战之整合WebSocket 文章目录 SpringBoot实战之整合WebSocket 前言 一.WebSocket简介 二.WebSocket原理 三.WebSocket特点 ...

  3. 利用IDEA搭建SpringBoot项目,整合mybatis,实现简单的登录功能。

    利用IDEA搭建SpringBoot项目,整合mybatis,实现简单的登录功能. 仅供参考!!! 仅供参考!!! 仅供参考!!! 利用闲余时间想自己搭建一个springboot+mybatis的项目 ...

  4. SpringBoot2x整合Mybatis(多数据源)

    SpringBoot2x整合Mybatis(多数据源)现在基本上都有各大项目必须的配置,一个项目需要多个数据源进行操作多个数据库,下面以三数据源为例,如果有更多数据源直接照着弄即可. 1.pom依赖 ...

  5. SpringBoot实战:整合Redis、mybatis,封装RedisUtils工具类等(附源码)

    创建SpringBoot项目 在线创建方式 网址:https://start.spring.io/ 然后创建Controller.Mapper.Service包 SpringBoot整合Redis 引 ...

  6. SpringBoot进阶教程 | 第四篇:整合Mybatis实现多数据源

    这篇文章主要介绍,通过Spring Boot整合Mybatis后如何实现在一个工程中实现多数据源.同时可实现读写分离. 准备工作 环境: windows jdk 8 maven 3.0 IDEA 创建 ...

  7. SpringBoot进阶教程 | 第四篇:整合Mybatis实现多数据源 1

    这篇文章主要介绍,通过Spring Boot整合Mybatis后如何实现在一个工程中实现多数据源.同时可实现读写分离. 准备工作 环境: windows jdk 8 maven 3.0 IDEA 创建 ...

  8. mysql动态配置数据源_Spring整合Mybatis实现动态数据源切换教程配置

    一.摘要 这篇文章将介绍Spring整合Mybatis 如何完成SqlSessionFactory的动态切换的.并且会简单的介绍下MyBatis整合Spring中的官方的相关代码. Spring整合M ...

  9. Springboot环境下mybatis配置多数据源配置

    mybatis多数据源配置(本文示例为两个),方便实现数据库的读写分离,分库分表功能 本文基于springboot2进行的配置,如版本为springboot1系列则需修改yml的配置(在文末附带) m ...

最新文章

  1. Thread系列——Thread.Sleep(0)
  2. Vysor_v1.6.9
  3. java 继承 私有变量_java – 继承和私有变量
  4. python画二维图_使用python绘制二维图形示例
  5. 如何删掉oracle服务,oracle留下的服务如何删除啊
  6. (转)windows 下 Java 及 Python 环境变量设置
  7. 【C语言】07-基本语句和运算
  8. C++实现一个基于mfc的学生信息管理系统
  9. GlobalMapper20提取点云LAS文件当中的投影信息
  10. WinForGIFSicle 1.0.0.1 免费开源版,基于GIFSicle的开源可视化批量GIF压缩工具
  11. 科创人|容联七陌CEO陈光:90后街舞少年的CEO修炼手册
  12. 迎接天翻地覆的重大演变:微软加速器区块链论坛成功举办
  13. Feedback from Microsoft
  14. 20200714学习笔记
  15. matlab不能定位,matlab定位问题!
  16. NVME-MI 学习记录_1 框架
  17. oracle open_cursors参数配置
  18. 作文 深海机器人_海底机器人作文500字
  19. 安卓无障碍API封装库: Android-Accessibility-Api
  20. JSP之数据库连接池·笔记

热门文章

  1. 程序员必备技能之 Git 的体系结构与历史
  2. 程序员该面向运维,还是面向开发?
  3. Google 包庇 Android 之父还给了 9000 万美元,女工程师们怒了!
  4. 不到 1000 元,你的所有隐私竟然都能随便查!!!
  5. Java程序员春招三面蚂蚁金服,丹丹丹学妹哭着对我说:学长
  6. 真牛!打开mysql
  7. java程序的开发工具是jdk,分享面经
  8. ubuntu合并终端_技术|初级:如何在终端及图形界面中更新 Ubuntu
  9. 计算机控制多少度,计算机控制中的模糊调度设计
  10. c语言坐标绕路,C语言中的奇技淫巧