dynamic多数据源的简单使用

news2024/7/6 18:27:53

背景

这几天搞了个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 {

    @Override
    public TestPg select() {
        return this.baseMapper.select();
    }
}

@Service
public class TestMysqlServiceImpl extends ServiceImpl<TestMysqlMapper, TestMysql> implements TestMysqlService {


    @Override
    public TestMysql select() {
        return this.baseMapper.select();
    }
}

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

controller

@RestController
@RequestMapping("/test")
public class TestController {

    @Resource
    private TestMysqlService testMysqlService;
    @Resource
    private 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.coloradmin.cn/o/1794502.html

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

相关文章

找好看的简历模板,就上这6个网站。

找好看的简历模板就上这6个网站&#xff0c;免费下载&#xff01; 1、菜鸟图库 个人简历模板|WORD文档模板免费下载 - 菜鸟图库 站内有超多办公类素材&#xff0c;PPT、world、excel模板都能找到&#xff0c;简历模板有非常详细的分类&#xff0c;风格类型也很多&#xff0c;想…

Kafka 如何基于 KRaft 实现集群最终一致性协调

01 架构概览 Zookeeper 提供了配置服务、分布式同步、命名服务、Leader 选举和集群管理等功能&#xff0c;在大数据时代的开始很多开源产品都依赖 Zookeeper 来构建&#xff0c;Apache Kafka 也不例外。但是随着 Kafka 功能的演进和应用的场景越来越多&#xff1a; 基于 Zoo…

linux命令别名与shell函数

# 修改网卡配置 alias vinetwork"vi /etc/sysconfig/network-scripts/ifcfg-ens33" 1. 方法和调用在同一个文件 # 定义shell函数,返回值通过$?获取 function say_hello(){ echo "hello shell" return 1 } # 使用shell函数 say_hello # 执行脚本后接收返…

怎么解决Hbuilderx的侧边栏不显示文件目录问题

第一步&#xff1a;找到视图 第二步&#xff1a;再视图中找到(显示项目管理器等左边视图)点击就可以了&#xff01;

时间卷积网络(TCN):概述及与CNN和RNN的比较

TCN 时间卷积网络&#xff08;TCN&#xff09;&#xff1a;概述及与CNN和RNN的比较1. 时间卷积网络&#xff08;TCN&#xff09;定义与特点应用场景 2. 卷积神经网络&#xff08;CNN&#xff09;定义与特点应用场景 3. 循环神经网络&#xff08;RNN&#xff09;定义与特点应用场…

【Mongodb】Mongodb亿级数据性能测试和压测

一&#xff0c;mongodb数据性能测试 如需转载&#xff0c;请标明出处&#xff1a;https://zhenghuisheng.blog.csdn.net/article/details/139505973 mongodb数据性能测试 一&#xff0c;mongodb数据性能测试1&#xff0c;mongodb数据库创建和索引设置2&#xff0c;线程池批量…

FatFs文件系统移植到MCU平台详细笔记经验教程

0、准备工作 在移植FatFs文件系统前&#xff0c;需要准备好一块开发板&#xff0c;和一张SD卡&#xff0c;且需要已经实现开发板正常的读写SD卡或其它硬件设备。 本文笔记教程中使用的硬件设备是STM32F407VET6开发板&#xff08;板载SD插槽&#xff09;&#xff0c;配备8G和32G…

【Vue3】vue3快速实现响应式数据恢复初始值。浅拷贝与深拷贝的应用。

有一个经常遇到的场景就是&#xff0c;一个表单最后一列有个编辑按钮&#xff0c;点击编辑按钮之后打开表单弹窗&#xff0c;修改其中的数据&#xff0c;但是如果此弹窗再作为新增弹窗打开的时候&#xff0c;弹窗数据会缓存上次编辑的数据。 在 Vue 3 中&#xff0c;由于引入了…

C语言二级指针、指针数组

一、二级指针 指针变量也是变量&#xff0c;是变量就应有地址&#xff0c;那指针变量的地址存放在哪里&#xff1f;存放在二级指针变量。 此时&#xff0c;*ppa pa&#xff0c;**ppa a。 二、指针数组 指针数组&#xff0c;顾名思义就是存放指针的数组。 数组每个元素为int类…

java自学阶段二:JavaWeb开发45(git学习)

目录&#xff1a; 学习目标git的使用&#xff08;工作流程、常用命令、idea集成&#xff09; 一、学习目标&#xff1a; 了解Git基本概念能够了解git的工作流程能够使用Git常用命令熟悉Git代码托管服务能够使用idea操作git 二、git的使用 1&#xff09;git的概念&#xff1…

学校教学选择SOLIDWORKS教育版的理由

在现代工程和技术教育领域中&#xff0c;计算机辅助设计软件&#xff08;CAD&#xff09;已成为不可或缺的教学工具。SOLIDWORKS作为一款功能强大、易于上手的CAD软件&#xff0c;其教育版在学校教学中备受青睐。本文将从多个方面探讨学校教学选择SOLIDWORKS教育版的理由。 一…

堪称2024最强的前端面试场景题,让419人成功拿到offer

前言 2024年的秋季招聘还有两个月就即将到来&#xff0c;很多同学开始思考前端面试中场景题的重要性。这里我提供一些见解和建议来帮助大家准备即将到来的面试。 首先&#xff0c;理解面试中场景题的必要性是至关重要的。与算法或理论问题不同&#xff0c;场景题更贴近实际工…

Linux系统推出VB6开发IDE了?Gambas,Linux脚本编写

第一个Linux程序&#xff0c;加法计算加弹窗对话框,Gambas,linux版的类似VB6的IDE开发环境 一开始想用VB6的Clng函数转成整数&#xff0c;没这函数。 输入3个字母才有智能提示&#xff0c;这点没做好 没有msgbox函数&#xff0c;要用messagebox.warning 如果可以添加函数别名就…

设计软件有哪些?效果工具篇(1),渲染100邀请码1a12

设计师会用到很多渲染效果和后期处理的工具&#xff0c;这里我们介绍一些。 1、AfterBurn AfterBurn是为Autodesk 3ds Max开发的专业级别的体积照明和效果插件。它提供了一系列强大的特效功能&#xff0c;包括烟雾、火焰、云彩等。用户可以利用AfterBurn创建逼真的环境效果&a…

18 - 各赛事的用户注册率(高频 SQL 50 题基础版)

18 - 各赛事的用户注册率 -- 注册率注册用户数/所有用户数 selectr.contest_id,round(100*count(*)/(select count(*) from Users),2) percentage from Register r group by r.contest_id order bypercentage desc,r.contest_id ASC;

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

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

Java中CAS机制详解

文章目录 概述CAS的基本概念CAS基本原理Java中的CAS实现什么是unsafe原子操作类解析 CAS机制的优缺点优点缺点 CAS应用场景CAS机制优化总结 概述 传统的并发控制手段&#xff0c;如使用synchronized关键字或者ReentrantLock等互斥锁机制&#xff0c;虽然能够有效防止资源的竞争…

参数传递和剪枝,从修剪二叉树谈起

669. 修剪二叉搜索树 - 力扣&#xff08;LeetCode&#xff09; 一、参数传递 Java中的参数传递方式只有一种&#xff0c;那就是值传递。如果我们传的是基本数据类型&#xff0c;那么函数接收到的就是该数据的副本&#xff0c;如果我们传的是对象&#xff0c;那么函数接收到的就…

Fortigate防火墙二层接口的几种实现方式

初始配置 FortiGate出厂配置默认地址为192.168.1.99&#xff08;MGMT接口&#xff09;&#xff0c;可以通过https的方式进行web管理&#xff08;默认用户名admin&#xff0c;密码为空&#xff09;&#xff0c;不同型号设备用于管理的接口略有不同。 console接口的配置 防火墙…

ubuntu certbot 生成https ssl证书

一、安装certbot应用 sudo apt update sudo apt install certbot python3-certbot-nginx二、生成证书 # 泛域名&#xff1a; certbot certonly -d *.你的主域名 --manual --preferred-challenges dns# 主域名&#xff1a; certbot certonly -d 你的主/子域名 --manual --pref…