【Spring实战】02 配置多数据源

文章目录

    • 1. 配置数据源信息
    • 2. 创建第一个数据源
    • 3. 创建第二个数据源
    • 4. 创建启动类及查询方法
    • 5. 启动服务
    • 6. 创建表及做数据
    • 7. 查询验证
    • 8. 详细代码
    • 总结

通过上一节的介绍,我们已经知道了如何使用 Spring 进行数据源的配置以及应用。在一些复杂的应用中,可能需要访问多个数据库,每个数据库可能负责不同的业务功能或数据存储。 那么,如果我们程序中需要两个或者两个以上数据源该怎么办呢? 本文将介绍如何使用 Spring 实现多数据源的配置和使用。

在这里插入图片描述

1. 配置数据源信息

在创建数据源之前,我们先预先定义好两个数据源的信息,注意前缀要区分开。

spring.h2.console.enabled=true
spring.h2.console.path=/h2-console# 创建第一个数据源信息
spring.datasource.jdbc-url=jdbc:h2:mem:db1
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=# 创建第二个数据源信息
spring.datasource2.jdbc-url=jdbc:h2:mem:db2
spring.datasource2.driverClassName=org.h2.Driver
spring.datasource2.username=sa
spring.datasource2.password=

2. 创建第一个数据源

创建第一个 Datasource1Config.java 文件,然后使用 @Configuration 注解声明这是一个配置类。再使用 @Bean 配合 @ConfigurationProperties 来获取数据源的信息用来创建 dataSourcejdbcTemplate 以备后面查询使用。

package com.cheney.demo.config;import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.core.JdbcTemplate;
import javax.sql.DataSource;@Configuration
public class Datasource1Config {@Bean@ConfigurationProperties("spring.datasource")public DataSource dataSource(){return DataSourceBuilder.create().build();}@Beanpublic JdbcTemplate jdbcTemplate(DataSource dataSource){return new JdbcTemplate(dataSource);}
}

3. 创建第二个数据源

创建第一个 Datasource2Config.java 文件,然后使用 @Configuration 注解声明这是一个配置类。再使用 @Bean 配合 @ConfigurationProperties 来获取数据源的信息用来创建 dataSource2jdbcTemplate2 以备后面查询使用。

package com.cheney.demo.config;import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.core.JdbcTemplate;
import javax.sql.DataSource;@Configuration
public class Datasource2Config {@Bean@ConfigurationProperties("spring.datasource2")public DataSource dataSource2(){return DataSourceBuilder.create().build();}@Beanpublic JdbcTemplate jdbcTemplate2(@Qualifier("dataSource2") DataSource dataSource){return new JdbcTemplate(dataSource);}
}

4. 创建启动类及查询方法

创建了一个正常的 Spring 启动类,分别注入了两套 JdbcTemplate 和 对外访问接口。

package com.cheney.demo;import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.sql.SQLException;@SpringBootApplication
@RestController
@Slf4j
public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}@Autowiredprivate JdbcTemplate jdbcTemplate;@Autowiredprivate JdbcTemplate jdbcTemplate2;@RequestMapping("db1")public String getUserFromDataSource1() throws SQLException {return jdbcTemplate.queryForList("select * from t_user").toString();}@RequestMapping("db2")public String getUserFromDataSource2(){return jdbcTemplate2.queryForList("select * from t_user").toString();}
}

5. 启动服务

通过控制台,我们可以看到启动了两个数据库连接分别是 conn0conn1 并且都打印出了 RUL 等信息

在这里插入图片描述

6. 创建表及做数据

1)使用 h2 数据库控制台连接 db1 ,创建表并登陆数据

访问下面 URL

http://localhost:8080/h2-console

使用 application.properties 里定义的第一个数据源的 URL 进行连接

在这里插入图片描述

点击 Connect 按钮,进入控制台。输入 建表语句并插入一条数据

在这里插入图片描述

CREATE TABLE IF NOT EXISTS `t_user` (`id`         INTEGER  PRIMARY KEY AUTO_INCREMENT,`name`       VARCHAR(32) NOT NULL,`age`        INTEGER  NOT NULL
);
INSERT INTO `t_user` (`id`, `name`, `age`) VALUES (1, 'cheney', '11');

点击 Run(绿色三角图标)

在这里插入图片描述

这就完成了对数据源1的建表和做数据(注意此条数据 age 是 11

1)使用 h2 数据库控制台连接 db2 ,创建表并登陆数据

连接方法一致,此时执行 sql

CREATE TABLE IF NOT EXISTS `t_user` (`id`         INTEGER  PRIMARY KEY AUTO_INCREMENT,`name`       VARCHAR(32) NOT NULL,`age`        INTEGER  NOT NULL
);
INSERT INTO `t_user` (`id`, `name`, `age`) VALUES (1, 'cheney', '22');

点击 Connect 按钮,进入控制台。输入 建表语句并插入一条数据,点击 Run(绿色三角图标)

在这里插入图片描述

这就完成了对数据源1的建表和做数据(注意此条数据 age 是 22

7. 查询验证

使用浏览器,先访问第一个数据源,使用如下 URL

http://localhost:8080/db1

在这里插入图片描述

和我们之前插入数据库的值一样, age 是 11

使用浏览器,先访问第二个数据源,使用如下 URL

http://localhost:8080/db2

在这里插入图片描述

和我们之前插入数据库的值一样, age 是 22

这样就可以分开使用数据库了,此处我们使用了两个数据源都是 h2 数据库,你也可以使用两个不一样的数据库。此处仅做了查询,你也可以做 insert 或者 update 等等。

8. 详细代码

https://github.com/cheney09/spring-practical-combat/tree/main/02/demo

在这里插入图片描述

总结

本文将介绍如何使用 Spring 实现多数据源,通过一个简单的 Spring 多数据源的配置和使用示例。实际项目中,你可能需要根据具体需求进行更复杂的配置和逻辑。希望这个示例能够帮助你理解如何在 Spring 应用程序中使用多个数据源。

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

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

相关文章

【SpringMVC】REST(Representation State Transfer)ful开发

REST全称Representation State Transfer,表现形式状态转换 文章目录 1. 为什么提出了REST?2. RESTful入门案例案例代码修改请求方式修改成RESTful风格,并以POST方式提交 RESTful格式下传参RESTful入门案例总结RequestBody,Reques…

Redis-运维

转自 极客时间 Redis 亚风 原文视频:https://u.geekbang.org/lesson/535?article681062 Redis 同步 Redis主从数据同步,主从第⼀次同步是全量同步 replicaof 主机 端口 #当前这个机器做Master的备份master如何判断slave是不是第⼀次来同步数据: Repl…

第11章 GUI Page400~402 步骤二 画直线

运行效果: 源代码: /**************************************************************** Name: wxMyPainterApp.h* Purpose: Defines Application Class* Author: yanzhenxi (3065598272qq.com)* Created: 2023-12-21* Copyright: yanzhen…

谷歌推大语言模型VideoPoet:文本图片皆可生成视频和音频

Google Research最近发布了一款名为VideoPoet的大型语言模型(LLM),旨在解决当前视频生成领域的挑战。该领域近年来涌现出许多视频生成模型,但在生成连贯的大运动时仍存在瓶颈。现有领先模型要么生成较小的运动,要么在生…

蓝桥杯 1223 第 2 场 小白入门赛

蓝桥小课堂-平方和 模拟 1 2 2 2 3 2 ⋯ n 2 n ⋅ ( n 1 ) ⋅ ( 2 n 1 ) 6 1^22^23^2\cdotsn^2\dfrac{n\;\cdot\;(n 1)\;\cdot\;(2n1)}{6} 122232⋯n26n⋅(n1)⋅(2n1)​。 write(n * (n 1) * (n * 2 1) / 6);房顶漏水啦 m a x ( 最大的行 − 最小的行 , 最大的列 −…

九:爬虫-MongoDB基础

MongoDB介绍 MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其…

Tomcat与Netty比较

Tomcat介绍Tomcat支持的协议Tomcat的优缺点Netty介绍Netty支持的协议Netty的优点和缺点Tomcat和Netty的区别Tomcat和Netty的应用场Tomcat和Netty来处理大规模并发连接的优化Tomcat与Netty的网络模型的区别Tomcat与Netty架构设计拓展 Tomcat介绍 Tomcat是一个免费的、开放源代码…

JavaOOP篇----第十五篇

系列文章目录 文章目录 系列文章目录前言一、有没有可能两个不相等的对象有相同的hashcode二、拷贝和浅拷贝的区别是什么?三、static都有哪些用法?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通…

RabbmitMQ基础

RabbmitMQ基础 1.1 什么是MQ MQ(Message Queue),从字面意思看,本质是个队列,FIFO先入先出,队列中存放的是message。是一种跨进程的通信机制,用于上下游传递消息。在互联网架构中,MQ是一种非常常见的上下游…

10 NAT网络地址转换

广域网技术 上面聊的内容都是内网的一些配置,但内网终将要访问外网的,我们需要怎么处理呢?一般使用HDLC(高级数据链路控制协议)或者PPP(点对点协议)。 使用PPP安全接入Internet PPP&#xff0…

PHP函数定义和分类

函数的含义和定义格式 在PHP中,允许程序员将常用的流程或者变量等组件组织成一个固定的格式实现特定功能,也就是说函数是具有特定功能特定格式的代码段。 函数的定义格式如下: function 函数名(参数1,参数2,参数n) {…

基于SSM的双减后初小教育课外学习生活活动平台的设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…

ESP8266网络相框采用TFT_eSPI库TJpg_Decoder库mixly库UDP库实现图片传送

用ESP8266和TFT_ESPI模块来显示图片数据。具体来说,我们将使用ILI9431显示器作为显示设备,并通过UDP协议将图片数据从发送端传输到ESP8266。最后,我们将解析这些数据并在TFT屏幕上显示出来。在这个过程中,我们将面临一些编程挑战&…

STM32 支持IAP的bootloader开发,使用串口通过Ymodem协议传输固件

资料下载: https://download.csdn.net/download/vvoennvv/88658447 一、概述 关于IAP的原理和Ymodem协议,本文不做任何论述,本文只论述bootloader如何使用串口通过Ymodem协议接收升级程序并进行IAP升级,以及bootloader和主程序两个工程的配置…

最常见的SQL报错注入函数(floor、updatexml、extractvalue)及payload总结

SQL报错注入是一种常见的SQL注入攻击方式,攻击者通过注入恶意代码,触发数据库的错误响应,并从错误信息中获取有用的信息。 下面介绍最常见的三个报错注入函数用法及payload总结: 1、floor() 使用floor报错注入,需要…

Centos 7.9安装Oracle19c步骤亲测可用有视频

视频介绍了在虚拟机安装centos 7.9并安装数据库软件的全过程 视频链接:https://www.zhihu.com/zvideo/1721267375351996416 下面的文字描述是安装数据库的部分介绍 一.安装环境准备 链接:https://pan.baidu.com/s/1Ogn47UZQ2w7iiHAiVdWDSQ 提取码&am…

Java经典框架之Spring

Java经典框架之Spring Java 是第一大编程语言和开发平台。它有助于企业降低成本、缩短开发周期、推动创新以及改善应用服务。如今全球有数百万开发人员运行着超过 51 亿个 Java 虚拟机,Java 仍是企业和开发人员的首选开发平台。 课程内容的介绍 1. Spring简介 2.…

T-Dongle-S3开发笔记——相关配置

portTICK_PERIOD_MS设置 Flash配置 Flash SPI mode 默认是DIO,改为QIO (W25Q128支持QIO) DIO与QIO区别: esp8266,esp32中的SPI FLASH 访问模式(QIO QOUT DIO DOUT)_qio dio-CSDN博客 Dual SPI:MOSI 和 MISO 引脚…

等腰三角形两底角相等

等腰三角形定义: 是指至少有两边相等的三角形。相等的两个边称为这个三角形的腰 二.证明 有等腰△ABC,AB和AC是腰,p是BC的中点 证明等腰三角形两底角相等 即 ∠ A B P ∠ P C A ∠ABP∠PCA ∠ABP∠PCA ∴ ∴ ∴ 三角形内角和为180 ∵ { ∠ A B P ∠ A P B ∠ B A P 180 …

什么是视频号小店?怎么开通,上架产品,一篇详解!

大家好,我是电商糖果 一个做了七年电商的95后,现居河南郑州。 混迹互联网多年,电商圈的gai溜子,偶尔会抽抽风。 这篇文章分享的内容是糖果在2022年做的电商项目——视频号小店。 因为它是刚出来的,很多人对此不是很…