Spring配置动态数据库
前言
本文主要介绍使用spring boot 配置多个数据库,即动态数据库
开始搭建
首先创建一个SpringWeb项目——dynamicdb(spring-boot2.5.7)
然后引入相关依赖lombok、swagger2、mybatis-plus,如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.7</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>dynamicdb</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>dynamicdb</name>
<description>dynamicdb</description>
<properties>
<java.version>8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.28</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency> <!-- mybatis-plus 依赖 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!-- sqlSessionTemplate 依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!-- spring-boot dynamic 动态数据库依赖-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>2.5.6</version>
</dependency>
<!-- druid 动态简易使用依赖 @DS("db1")-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.20</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
然后在包dynamicdb下面创建controller、mapper、dbmodel, 然后在resource下面创建mapper文件夹及问题,如下图:

然后配置application,启用swagger2和添加mapper扫描,如下:
@EnableSwagger2
@Log4j2
@SpringBootApplication
@MapperScan("com.example.dynamicdb.mapper")
public class DynamicdbApplication {
public static void main(String[] args) {
SpringApplication.run(DynamicdbApplication.class, args);
}
}
然后编辑resources下的application.yml,如下:
server:
port: 8082
servlet:
context-path: /api
spring:
servlet:
multipart:
max-file-size: 50MB
max-request-size: 50MB
datasource:
dynamic: #使用动态数据库配置
primary: db1 # 配置默认数据库
datasource:
db1: # 数据源1
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost/db1
username: root
password: 1qaz!QAZ
db2: # 数据源2
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost/db2
username: root
password: 1qaz!QAZ
druid:
initial-size: 1
max-active: 20
min-idle: 1
max-wait: 60000
autoconfigure:
exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure # 去除druid配置
mybatis-plus:
mapper-locations: classpath:mapper/*.xml #指定resources下的mapper文件夹下是存储映射XML的文件夹
然后创建SqlSessionController,使用SqlSession来加载Mapper,代码如下:
@RestController
public class SqlSessionController {
@Autowired
private SqlSession sqlSession;
@GetMapping(value = "/SqlSession/normalSql")
@ResponseBody
@ApiOperation(value = "默认查询,从主数据库查询", notes = "当前配置的主数据是db1-primary: db1")
public List<user> normalSql() {
//读取第一个数据库的值
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<user> users = mapper.test();
return users;
}
@GetMapping(value = "/SqlSession/data_from_db1")
@ResponseBody
@DS("db1")
@ApiOperation(value = "从db1数据库查询数据", notes = "查询db1")
public List<user> data_from_db1() {
//读取第一个数据库的值
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<user> users = mapper.test();
return users;
}
@GetMapping(value = "/SqlSession/data_from_db2")
@ResponseBody
@DS("db2")
@ApiOperation(value = "从db2数据库查询数据", notes = "查询db2")
public List<user> data_from_db2(Integer id) {
//读取第二个数据库的值
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<user> users = mapper.test();
return users;
}
}
代码中使用 @DS("db1")来指定该接口内使用的数据库。
再创建一个MapperController,测试使用Mapper直接访问数据库,如下
@RestController
public class MapperController {
@Autowired
private UserMapper userMapper;
@GetMapping(value = "/Mapper/normalSql")
@ResponseBody
@ApiOperation(value = "使用Mapper查询,从主数据库查询", notes = "当前配置的主数据是db1-primary: db1")
public List<user> normalSql() {
//读取第一个数据库的值
List<user> users = userMapper.test();
return users;
}
}
----------------------------------------------------------------------------------------------------
到此,Spring配置动态数据库就已经介绍完了。
代码已经传到Github上了,欢迎大家下载。
Github地址:https://github.com/kiba518/dynamicdb
----------------------------------------------------------------------------------------------------
注:此文章为原创,任何形式的转载都请联系作者获得授权并注明出处!
若您觉得这篇文章还不错,请点击下方的【推荐】,非常感谢!
https://www.cnblogs.com/kiba/p/17473450.html

Spring配置动态数据库的更多相关文章
- Spring配置动态数据源-读写分离和多数据源
在现在互联网系统中,随着用户量的增长,单数据源通常无法满足系统的负载要求.因此为了解决用户量增长带来的压力,在数据库层面会采用读写分离技术和数据库拆分等技术.读写分离就是就是一个Master数据库,多 ...
- 使用Spring配置动态数据源实现读写分离
最近搭建的一个项目需要实现数据源的读写分离,在这里将代码进行分享,以供参考.关键词:DataSource .AbstractRoutingDataSource.AOP 首先是配置数据源 <!-- ...
- 使用 Spring 配置动态数据源实现读写分离
关键词:DataSource .AbstractRoutingDataSource.AOP 首先是配置数据源 <!--读数据源配置--><bean id="readData ...
- 阿里P7教你如何使用 Spring 配置动态数据源实现读写分离
最近搭建的一个项目需要实现数据源的读写分离,在这里将代码进行分享,以供参考. 关键词:DataSource .AbstractRoutingDataSource.AOP 首先是配置数据源 <!- ...
- spring AOP 动态代理和静态代理以及事务
AOP(Aspect Oriented Programming),即面向切面编程 AOP技术,它利用一种称为"横切"的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装 ...
- 如何通过Spring Boot配置动态数据源访问多个数据库
之前写过一篇博客<Spring+Mybatis+Mysql搭建分布式数据库访问框架>描述如何通过Spring+Mybatis配置动态数据源访问多个数据库.但是之前的方案有一些限制(原博客中 ...
- IntelliJ IDEA通过Spring配置连接MySQL数据库
先从菜单View→Tool Windows→Database打开数据库工具窗口,如下图所示: 点击Database工具窗口左上角添加按钮"+",选择Import from sour ...
- 【Spring】如何在单个Boot应用中配置多数据库?
原创 BOOT 为什么需要多数据库? 默认情况下,Spring Boot使用的是单数据库配置(通过spring.datasource.*配置具体数据库连接信息).对于绝大多数Spring Boot应用 ...
- Spring Boot MyBatis配置多种数据库
mybatis-config.xml是支持配置多种数据库的,本文将介绍在Spring Boot中使用配置类来配置. 1. 配置application.yml # mybatis配置 mybatis: ...
- spring BasicDataSource 数据源配置 sqlserver数据库 oracle数据库 mysql数据jdbc配置
spring BasicDataSource 数据源配置 sqlserver数据库 oracle数据库 mysql数据jdbc配置 jdbc.properties 文件信息如下: ---------- ...
随机推荐
- Android系统服务DropBoxManagerService详解与实践应用
作者:vivo 互联网客户端团队- Ma Lian 借助系统DropBoxManagerService对于系统文件目录dropbox管理的设计,了解其文件管理的规则.运行机制.读写机制.管控机制,根据 ...
- rocketMq和kafka对比
为什么在RocketMQ和kafka中选型 在单机同步发送的场景下,Kafka>RocketMQ,Kafka的吞吐量高达17.3w/s,RocketMQ吞吐量在11.6w/s. kafka高性能 ...
- ACM-NEFUOJ-P239回文数
#include<bits/stdc++.h> using namespace std; int n,p[1000],len,p1[1000]; int f() { int i; for( ...
- C语言结构体大小分析
title: C语言结构体大小分析 author: saopigqwq233 date: 2022-04-05 C语言结构体大小分析 一,基本类型 C语言自带的数据类型大小如下 数据类型 大小(字节) ...
- ggplot2图形可视化应用集锦
数据可视化就是将我们从数据中探索的信息与图形要素对应起来的过程.数据可视化,先要理解数据,再去掌握可视化的方法,这样才能实现高效的数据可视化.数据可视化技术的基本思想,是将数据库中每一个数据项作为单个 ...
- Chrome浏览器插件 Undo Close Tab (恢复关掉的标签页)
背景 如果您经常使用Chrome浏览器,也许有时候会意外关闭一个标签页,从而丢失您正在查看的内容.这时您可能会感到非常烦恼,并希望能够迅速找回这个标签页.当然,您可以通过点击浏览器历史记录中的条目来找 ...
- sqlite4操作
目录 SQLite数据库(一):基本操作... 1 目录... 1 一.SQLite介绍... 2 1. 什么是SQLite. 2 2. 什么是数据库... 2 3. 数据库是如何存 ...
- 【HALF】CSP-S2 2022 游记 - Dawn Eve?
相册放在 NOIP2022 游记 了 Day -2 周三.折腾了好几天,考场从深圳换到广州最后换到东莞.疫情爆炸... 只是希望自己最后两场比赛不会受到影响. 下午是高二体锻课,结果我们得去做核酸.四 ...
- Go For Web:Golang http 包详解(源码剖析)
前言: 本文作为解决如何通过 Golang 来编写 Web 应用这个问题的前瞻,对 Golang 中的 Web 基础部分进行一个简单的介绍.目前 Go 拥有成熟的 Http 处理包,所以我们去编写一个 ...
- day02-2-商铺查询缓存
功能02-商铺查询缓存 3.商铺详情缓存查询 3.1什么是缓存? 缓存就是数据交换的缓冲区(称作Cache),是存储数据的临时地方,一般读写性能较高. 缓存的作用: 降低后端负载 提高读写效率,降低响 ...