图片模板免费下载,黄石seo,wordpress升级机制,产品做网站推广有些人因为看见所以相信#xff0c;有些人因为相信所以看见 有目录#xff0c;不迷路 前期准备实现演示代码地址参考 最近研究了一下多数据源#xff0c;这篇博客讲的是简单模式#xff0c;下篇博客预计写自动切换模式
前期准备 本篇博客基于SpringBoot整合MyBatis-plus有些人因为相信所以看见 有目录不迷路 前期准备实现演示代码地址参考 最近研究了一下多数据源这篇博客讲的是简单模式下篇博客预计写自动切换模式
前期准备 本篇博客基于SpringBoot整合MyBatis-plus如果有不懂这个的 可以查看我的这篇博客快速CRUD的秘诀之SpringBoot整合MyBatis-Plus 为了实现效果先在本地的mysql库里面创建两个数据库 然后在两个数据库里面分别创建同样的users表但是插入不同的数据 mydb的数据 mydb2的数据
实现
1.在pom.xml中引入多数据源的依赖dynamic-datasource-spring-boot-starter
!-- 多数据切换所需依赖 --
dependencygroupIdcom.baomidou/groupIdartifactIddynamic-datasource-spring-boot-starter/artifactIdversion3.0.0/version
/dependency2.在application.yml配置文件中配置多数据源
sever:# 端口port: 8080# 配置数据源
spring:datasource:dynamic:primary: master #设置默认的数据源或者数据源组,默认值即为masterstrict: false #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源datasource:master:# 数据库路径jdbc:mysql://localhost:3306/mydb 的缩写,并配置时区url: jdbc:mysql:///mydb?serverTimezoneGMT%2B8username: rootpassword: 123456driver-class-name: com.mysql.cj.jdbc.Driver # 3.2.0开始支持SPI可省略此配置slave:url: jdbc:mysql:///mydb2?serverTimezoneGMT%2B8username: rootpassword: 123456driver-class-name: com.mysql.cj.jdbc.Driver# 打印MyBatis SQL 日志
logging:level:com.guqueyue.test.dao: debug # 写接口的包名注意
这里数据源的名字可以自定义什么master、slave都可以随意命名。这里可以根据格式自行添加数据源的个数并且支持多种数据库如oracle、达梦等。此处为了演示方便都使用了mysql数据库。
3.编写代码 3.1.在持久层中查找users表的数据并使用 DS注解切换数据源
package com.guqueyue.test.dao;import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.guqueyue.test.entity.User;
import org.apache.ibatis.annotations.Select;import java.util.List;/*** Author: guqueyue* Description: 映射接口UserMapper* Date: 2023/12/19**/
public interface UserMapper extends BaseMapperUser {DS(master) // 默认为主数据源其实可以省略Select(select * from users)ListUser selectUserList();DS(slave) // 切换为slave数据源Select(select * from users)ListUser selectUserListBySlave();}注意:
DS注解不止可以用在持久层可以用在任意的类和方法上。DS注解作用在方法上的优先级 类。
也就是说可以在类上加一个DS注解默认一个该类的数据源如 DS(master) 再在具体的方法上加一个DS注解做个性化指定如 DS(slave)效果等同
/*** Author: guqueyue* Description: 映射接口UserMapper* Date: 2023/12/19**/
DS(master) // 默认为主数据源其实可以省略
public interface UserMapper extends BaseMapperUser {Select(select * from users)ListUser selectUserList();DS(slave) // 切换为slave数据源Select(select * from users)ListUser selectUserListBySlave();}3.2.创建service接口
package com.guqueyue.test.service;import com.baomidou.mybatisplus.extension.service.IService;
import com.guqueyue.test.entity.User;import java.util.List;/*** Author: guqueyue* Description: 用户service接口* Date: 2023/12/19**/
public interface IUserService extends IServiceUser {ListUser selectUserList(String type);
}3.3.创建service实现类并调用持久层接口根据传入的参数切换不同的方法
package com.guqueyue.test.service.impl;import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.guqueyue.test.dao.UserMapper;
import com.guqueyue.test.entity.User;
import com.guqueyue.test.service.IUserService;
import org.springframework.stereotype.Service;import javax.annotation.Resource;
import java.util.List;/*** Author: guqueyue* Description: 用户实现类* Date: 2023/12/19**/
Service
public class UserServiceImpl extends ServiceImplUserMapper, User implements IUserService {Resourceprivate UserMapper userMapper;Overridepublic ListUser selectUserList(String type) {// do something: 此处可根据实际情况进行业务选择如根据当前登录的用户信息来选择不同的数据库// 此处为了方便演示直接用前端传入的type来判断return slave.equals(type) ? userMapper.selectUserListBySlave(): userMapper.selectUserList();}
}3.4.编写控制层代码
package com.guqueyue.test.controller;import com.guqueyue.test.entity.User;
import com.guqueyue.test.service.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.List;/*** Author: guqueyue* Description: 用户控制层* Date: 2023/12/19**/
RestController
RequestMapping(/user)
public class UserController {Autowiredprivate IUserService userService;/*** 查询用户列表* return*/RequestMapping(/list)public ListUser userList(String type) {System.out.println(接收到的数据源类型为 type);return userService.selectUserList(type);}
}演示
代码编写好了我们就可以启动项目了 控制台显示项目启动成功后 在浏览器输入http://localhost:8080/user/list?typemaster返回 在浏览器输入http://localhost:8080/user/list?typeslave则返回 功能实现。
代码地址
本文代码已开源
git clone https://gitee.com/guqueyue/my-blog-demo.git请切换到gitee分支然后查看dynamicDataSourceSimple模块即可
参考 具体实现可以参考官方文档多数据源 完结撒花