dynamic多数据源的简单使用

背景

这几天搞了个saas项目,里面用到了多数据和execl模板导出功能,
其实我是经常用到的,但没在博客中写过,最近有点时间,正好稍微写一下。 方便大家使用
这次我先写多数据,execl模板导出下次有空在写。

使用

pom引入

     <dependency><groupId>com.baomidou</groupId><artifactId>dynamic-datasource-spring-boot-starter</artifactId><version>4.3.0</version></dependency>

这里因为需要用的多个数据库 所以我又引入了mysql和postgresql,大家居然自己的情况来。
mysql版本我使用的是8.0.16
druid版本我使用的是1.1.20

 <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql.version}</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>${druid.version}</version></dependency><dependency><groupId>org.postgresql</groupId><artifactId>postgresql</artifactId></dependency>

配置文件

spring.datasource.druid.initial-size=5
spring.datasource.druid.max-active=20
spring.datasource.druid.min-idle=5
spring.datasource.druid.stat-view-servlet.reset-enable=true
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.dynamic.primary=master
spring.datasource.dynamic.strict=false
spring.datasource.dynamic.datasource.master.url=jdbc:mysql://127.0.0.1:3306/test?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=Asia/Shanghai&allowMultiQueries=true
spring.datasource.dynamic.datasource.master.username=root
spring.datasource.dynamic.datasource.master.password=123456
spring.datasource.dynamic.datasource.master.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.dynamic.datasource.slave_1.url=jdbc:postgresql://127.0.0.1:45565/postgres
spring.datasource.dynamic.datasource.slave_1.username=root
spring.datasource.dynamic.datasource.slave_1.password=123456
spring.datasource.dynamic.datasource.slave_1.driver-class-name=org.postgresql.Driver

如果还有多个数据源的话,继续添加slave_xx就可以了
这里有个注意点spring.datasource.dynamic.primary=master 这里是指的默认的数据源,大家根据自身的情况调整。

代码实现

这里的话,我只是写的例子,所以比较简单。

model

@Setter
@Getter
public class TestMysql {private Integer id;private String name;
}
@Setter
@Getter
public class TestPg {private Integer id;private String name;
}

mapper

@Mapper
public interface TestMysqlMapper  extends BaseMapper<TestMysql> {TestMysql select();
}
@Mapper
public interface TestPgMapper extends BaseMapper<TestPg> {TestPg select();
}
xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.secusoft.demo.mapper.TestPgMapper"><select id="select" resultType="com.secusoft.demo.model.TestPg">select * from test.test_pg</select>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.secusoft.demo.mapper.TestMysqlMapper"><select id="select" resultType="com.secusoft.demo.model.TestMysql">select * from test_mysql</select>
</mapper>

service

public interface TestPgService  extends IService<TestPg> {TestPg select();
}
public interface TestMysqlService extends IService<TestMysql> {TestMysql select();
}
实现
@Service
@DS("slave_1")
public class TestPgServiceImpl  extends ServiceImpl<TestPgMapper, TestPg> implements TestPgService {@Overridepublic TestPg select() {return this.baseMapper.select();}
}
@Service
public class TestMysqlServiceImpl extends ServiceImpl<TestMysqlMapper, TestMysql> implements TestMysqlService {@Overridepublic TestMysql select() {return this.baseMapper.select();}
}

这里有个注意点:@DS(“slave_1”)注解 对应的就是上面写的slave_1,master可默认不写

controller

@RestController
@RequestMapping("/test")
public class TestController {@Resourceprivate TestMysqlService testMysqlService;@Resourceprivate TestPgService testPgService;@GetMapping("/sql")public Object sql() {TestMysql testMysql = testMysqlService.select();TestPg testPg = testPgService.select();List<Object> list=new ArrayList<>();list.add(testMysql);list.add(testPg);return list;}}

调用测试

在这里插入图片描述
完成。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/23424.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux常用命令及用法

一.linux系统下可以在帮助中查看每一个命令的用法&#xff1a; 方法&#xff1a;cmd --help 例如&#xff1a; ls --help 二.常用命令 1.find 命令 find / -name aa //根目录下搜索aa的文件或者目录 find -name aa //相当于 find ./ -name aa 直接在当前…

破解App推广难题,Xinstall地推助手APP助你轻松触达海量用户

在日新月异的互联网环境中&#xff0c;App推广和运营面临着前所未有的挑战。流量红利逐渐衰退&#xff0c;用户获取成本不断攀升&#xff0c;如何迅速搭建起能满足用户需求的运营体系&#xff0c;成为众多企业亟待解决的问题。今天&#xff0c;我们将为大家介绍一款能够轻松解决…

易语言被嘲讽24年,但这个新式中文编程却大受好评?

被嘲讽了20年的易语言 在众多广为人知的编程语言中&#xff0c;如Java、C语言和Python&#xff0c;它们都是开发者们耳熟能详的工具&#xff0c;然而&#xff0c;有一门名为“易语言”的编程语言&#xff0c;可能并不被大多数人所熟知。 易语言&#xff0c;诞生于本世纪初&…

ubuntu开机黑屏

BusyBox v1.30.1 (Ubuntu 1:1.30.1-4ubuntu6.1) built-in shell (ash) Enter help for a list of built-in commands. 解决&#xff1a; help 看看哪个盘出问题了 fsck -y /dev/sda1 &#xff08;出问题的磁盘/分区&#xff09; reboot 就可以进入系统了 fsck命令&#xf…

Vulnhub-DC-3

joomla3.7.0的提权 靶机IP:192.168.20.136 kaliIP:192.168.20.128 网络有问题的可以看下搭建Vulnhub靶机网络问题(获取不到IP) 信息收集 首先nmap扫端口和版本&#xff0c;dirsearch跑下目录&#xff0c;wappalyzer也可以用下 发现服务器用的ubuntu&#xff0c;JoomlaCMS等…

探索数据结构:堆,计数,桶,基数排序的分析与模拟实现

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;数据结构与算法 贝蒂的主页&#xff1a;Betty’s blog 1. 堆排序 1.1. 算法思想 堆排序(Heap Sort)是一种基于堆数据结构的排…

PPINtonus (深度学习音调分析)帕金森病早期检测系统

帕金森病&#xff08;Parkinson’s Disease&#xff0c;简称PD&#xff09;是一种主要影响运动功能的进行性神经退行性疾病。这种疾病主要是由于大脑中一个名为黑质&#xff08;substantia nigra&#xff09;的区域失去产生多巴胺的神经元而引起的。PD的主要运动症状包括震颤、…

FreeRTOS学习笔记-基于stm32(9)信号量总结(二值信号量、计数型信号量、互斥信号量、优先级翻转、优先级继承)

一、什么是信号量 信号量是一种队列&#xff0c;用于任务间同步和资源管理的机制&#xff0c;主要用来传递状态。就像是一种特殊的“旗子”或“钥匙”&#xff0c;用来在不同的任务之间进行沟通和协调&#xff0c;确保它们能够正确地配合工作&#xff0c;不会互相干扰。 二、二…

人形机器人:工业领域的得力助手

人行机器人近2年显示出强劲的增长势头&#xff0c;根据最新数据预测&#xff0c;到2026年&#xff0c;中国人形机器人产业规模将突破200亿元&#xff0c;这一数字预示着人形机器人在未来社会中将扮演更加重要的角色。 在工业领域&#xff0c;由于工业环境复杂多变&#xff0c;对…

Spring类加载机制揭秘:深度解析“卸载”阶段

1. 引言 在Spring框架中&#xff0c;类的加载和卸载是一个复杂但至关重要的过程。加载主要涉及将类的字节码加载到JVM中&#xff0c;创建对应的Class对象&#xff0c;并准备使其可用的过程。而卸载&#xff0c;则是指当一个类不再被需要时&#xff0c;将其从JVM中清除&#xf…

识别图片二维码

文档地址&#xff1a; uni-app &#xff1a; wx.previewImage(Object object) | 微信开放文档 微信小程序&#xff1a;wx.previewImage(Object object) | 微信开放文档 longpress"seeQRcode(url)”) show-menu-by-longpress"true" //识别 这个地方不触发 …

Flutter StatefulWidget 和 StatelessWidget 的区别

在 Flutter 中&#xff0c;StatefulWidget 和 StatelessWidget 是两种不同类型的 Widget&#xff0c;它们的主要区别在于它们是否能够携带和管理状态。 StatelessWidget StatelessWidget 是不可变的&#xff0c;这意味着一旦它们被创建&#xff0c;它们的属性就不能改变。它们…

网络协议二

一、套接字Socket 基于 TCP UDP 协议的 Socket 编程&#xff0c;在讲 TCP 和 UDP 协议的时候&#xff0c;我们分客户端和服务端&#xff0c;在写程序的时候&#xff0c;我们也同样这样分。 在网络层&#xff0c;Socket 函数需要指定到底是 IPv4 还是 IPv6&#xff0c;分别对应设…

基于RNN和Transformer的词级语言建模 代码分析 log_softmax

基于RNN和Transformer的词级语言建模 代码分析 log_softmax flyfish Word-level Language Modeling using RNN and Transformer word_language_model PyTorch 提供的 word_language_model 示例展示了如何使用循环神经网络RNN(GRU或LSTM)和 Transformer 模型进行词级语言建模…

三丰云免费虚拟主机及免费云服务器评测

三丰云是一家专业的云服务提供商&#xff0c;其免费虚拟主机和免费云服务器备受好评。三丰云提供稳定可靠的服务&#xff0c;完全免费的虚拟主机和云服务器让用户可以轻松搭建自己的网站或应用。自从开始使用三丰云的免费虚拟主机和免费云服务器后&#xff0c;我的网站访问速度…

thinkphp3.1中怎么使model查询以其中一个字段为key,另一个字段为值的数组?

在ThinkPHP 3.1中&#xff0c;如果你想要以一个字段作为键&#xff08;key&#xff09;&#xff0c;另一个字段作为值&#xff08;value&#xff09;来获取数组&#xff0c;可以通过查询结果集然后手动构建数组来实现。这里有一个简单的示例&#xff1a; // 假设我们有一个名为…

bash、zsh、fish三种流行Unix shell的区别

bash、zsh、fish三种流行Unix shell的区别 一、功能上的区别二、使用体验上的区别三、以下是每种 Shell 的常用命令行示例&#xff1a;BashZshFish 一、功能上的区别 bash&#xff1a;bash 是 Bourne Again SHell 的缩写&#xff0c;是 Linux 系统中默认的 Shell。bash 的特点是…

SQL性能优化 ——OceanBase SQL 性能调优实践分享(3)

相比较之前的两篇《连接调优》和《索引调优》&#xff0c;本篇文章主要是对先前两篇内容的整理与应用&#xff0c;这里不仅归纳了性能优化的策略&#xff0c;也通过具体的案例&#xff0c;详细展示了如何分析并定位性能瓶颈的步骤。 SQL 调优 先给出性能优化方法和分析性能瓶…

为什么基于 Django 和 Scrapy 的项目需要 @sync_to_async 装饰器

在现代 web 开发中&#xff0c;异步编程正变得越来越重要&#xff0c;特别是对于需要处理大量 I/O 操作的应用程序。Scrapy 是一个用于 web 抓取的异步框架&#xff0c;而 Django 是一个流行的 web 框架&#xff0c;主要采用同步编程模型。将这两个框架结合在一个项目中时&…

YT-DLP 超好用的开源视频下载工具

YT-DLP 是一个功能丰富的命令行音频/视频下载器&#xff0c;是 youtube-dl 的一个分支。由于 youtube-dl 已经停止更新&#xff0c;YT-DLP 不仅继承了其功能&#xff0c;还进行了多项改进和扩展。YT-DLP 不仅可以下载 YouTube 视频&#xff0c;还支持众多站点&#xff0c;包括国…