基于springboot的多数据源配置

发布时间:2018-12-11

技术:springboot1.5.1 + maven3.0.1+ mybatis-plus-boot-starter2.3.1 + dynamic-datasource-spring-boot-starter2.4.2 + jdk1.8

概述

详细

代码下载:http://www.demodashi.com/demo/14622.html

一、前言

本篇demo实现了springboot项目实现了多数据源切换的功能。对一些有多个数据库的项目来说是一个很好的参考。

关于动态数据源的切换的方案有很多,核心只有两种。一种是构建多套环境,另一种是基于spring原生的 AbstractRoutingDataSource 切换。如果你的数据源较少,场景不复杂,选择以上任意一种都可以。如果你需要更多特性,可以参考本demo。

二、实现过程(使用方法)

  1. 引入dynamic-datasource-spring-boot-starter。
<dependency>
  <groupId>com.baomidou</groupId>
  <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
  <version>${version}</version>
</dependency>

2.配置数据源。

spring:
  datasource:
    dynamic:
      datasource:
        master:
          username: root
          password: root
          url: jdbc:mysql://localhost/master?characterEncoding=utf-8&useSSL=true&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&serverTimezone=GMT%2b8
          driver-class-name: com.mysql.jdbc.Driver
        slave:
          username: root
          password: root
          url: jdbc:mysql://localhost/slave?characterEncoding=utf-8&useSSL=true&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&serverTimezone=GMT%2b8
          driver-class-name: com.mysql.jdbc.Driver

3.使用 @DS 切换数据源

@DS 可以注解在方法上和类上,同时存在方法注解优先于类上注解。

注解在service实现或mapper接口方法上,但不建议同时在service和mapper注解。

package com.zxh.service.impl;

import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.zxh.entity.User;
import com.zxh.mapper.UserMapper;
import com.zxh.service.UserService;

import org.springframework.stereotype.Service;

@Service
@DS("slave")
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {

    @Override
    @DS("master")//这里必须包一层,不能调用mp默认的插入,因为会走到从库去
    public void addUser(User user) {
        baseMapper.insert(user);
    }

    @Override
    @DS("slave")
    public User selectSlaveUser(Long id) {
    	return baseMapper.selectById(id);
    }
}

4.集成mybatis-plus

只要进入mybatisPlus相关jar包,项目自动集成。 兼容mybatisPlus 2.x和3.x的版本。

只要注解在mybatisPlus的mapper或serviceImpl上即可完成mp内置方法切换。

<dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>2.3.1</version>
        </dependency>

5.在本地的mysql分别建master跟slave两个数据库

6.在两个数据库分别建user表,表结构如下:

7.项目演示:

a).执行testAddUser

   @Test
    public void testAddUser() {
        User user = new User();
        user.setName("测试用户" + random.nextInt());
        user.setAge(random.nextInt(100));
        userService.addUser(user);
    }
    @Override
    @DS("master")//这里必须包一层,不能调用mp默认的插入,因为会走到从库去
    public void addUser(User user) {
        baseMapper.insert(user);
    }

因为我们在addUser里加了@DS("master")注解,所以会走到主库里面,可以看到master数据库插了一条记录:

b).执行testSelectById,slave数据库里面有一条数据如下:

 @Test
    public void testSelectById() {
    	User user = userService.selectSlaveUser(2L);
    	System.out.println(user.getName());
    }

执行后结果,可以看到后台打印了用户名

这样就实现了动态加载多数据源的效果。

三、项目结构图

三、常见问题

多个库的事物如何处理?

不能 不能 不能,一个业务操作涉及多个库不要加事务。

代码下载:http://www.demodashi.com/demo/14622.html

注:本文著作权归作者,由demo大师发表,拒绝转载,转载需要作者授权

原文地址:https://www.cnblogs.com/demodashi/p/10503263.html

时间: 2024-08-30 03:58:52

基于springboot的多数据源配置的相关文章

springboot+ibatis 多数据源配置

这个是boot基本版本包,因为我用的打包方式是war所以去除掉了boot内置的tomcat,但是为了方便测试又引入了内置tomcat,只要添加<scope>provided</scope>在打包时就不会影响了. <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> &l

基于springboot的多数据源自动配置实现

最近做了一个自动支持多数据源配置的功能,基于springboot生态扩展,可自动识别配置文件中的数据库配置参数,并进行autoconfig. multiple-datasource多数据源支持模块 功能性 支持自动化配置多个数据源: 支持自动化配置持久层框架(mybatis): 支持自动化配置分布式事务管理器(JTA-Atomikos): 支持不同数据源使用不同数据库: 支持不同数据源使用不同数据库且使用不同连接池(hikari.dbcp2.tomcat-pool.druid等): 支持自动适配

springboot之多数据源配置JdbcTemplate

springboot多数据源配置,代码如下 DataSourceConfig package com.rookie.bigdata.config; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.jdbc.

springboot整合多数据源配置

简介 主要介绍两种整合方式,分别是 springboot+mybatis 使用分包方式整合,和 springboot+druid+mybatisplus 使用注解方式整合. 一.表结构 在本地新建两个数据库,名称分别为db1和db2,新建一张user表,表结构如下: SQL代码: CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键', `name` varchar(25) NOT NULL COMMENT

springboot druid 多数据源配置

由于工作当中,需要配置双数据源进行数据同步,以目录进行区别主副库的编写.这里记录一下,方便大家. 1.pom配置 <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>${druid-spring-boot-starter.version}</version></d

springboot 双 sqlite 数据源配置

1.在配置资源文件中 配置如下 spring.datasource.type=com.alibaba.druid.pool.DruidDataSource #SQLLITE #SQLLITE spring.datasource.sqlite.driver-class-name=org.sqlite.JDBC spring.datasource.sqlite.url=jdbc:sqlite:db/personInfo.db #SQLLITE spring.datasource.sqlite2.dr

Springboot多数据源配置

目前,业界流行的数据操作框架是 Mybatis,那 Druid 是什么呢? Druid 是 Java 的数据库连接池组件.Druid 能够提供强大的监控和扩展功能.比如可以监控 SQL ,在监控业务可以查询慢查询 SQL 列表等.Druid 核心主要包括三部分: 1. DruidDriver 代理 Driver,能够提供基于 Filter-Chain 模式的插件体系. 2. DruidDataSource 高效可管理的数据库连接池 3. SQLParser 当业务数据量达到了一定程度,DBA 需

基于xml的Spring多数据源配置和使用

上一篇讲了<基于注解的Spring多数据源配置和使用>,通过在类或者方法上添加@DataSource注解就可以指定某个数据源.这种方式的优点是控制粒度细,也更灵活. 缺点是当有些时候项目分模块开发,可能某一个模块只访问同一个数据源,这种场景下如果使用注解的话就要在这个模块下的所有dao接口都增加注解@DataSource,就会显得繁琐. 如果能直接在配置文件中一次性配置好,不用在每个类都添加注解岂不是更好?当然也是可以的^_^. 首先,再创建一个AOP切面,名为DataSourceAspect

spring基于通用Dao的多数据源配置

有时候在一个项目中会连接多个数据库,须要在spring中配置多个数据源,近期就遇到了这个问题,因为我的项目之前是基于通用Dao的,配置的时候问题不断.这样的方式和资源文件冲突:扫描映射文件的话,SqlSessionFactory的bean名字必须是sqlSessionFactory 他读不到sqlSessioNFactory2或者其它名字,终于解决方法例如以下: 1.在项目中增加例如以下类MultipleDataSource.java package com.etoak.util; import