Spring Boot数据访问—(springboot 多数据源)—官方原版
Spring Boot 包含许多用于处理数据源的启动器,本文回答与执行此操作相关的问题。
一、配置自定义数据源
要配置自己的DataSource,请在配置中定义该类型的@Bean。Spring Boot在任何需要的地方重用DataSource,包括数据库初始化。如果需要外部化某些设置,可以将DataSource绑定到环境(请参阅“第三方配置”)。
以下示例显示了如何在bean中定义数据源:
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration(proxyBeanMethods = false)
public class MyDataSourceConfiguration {@Bean@ConfigurationProperties(prefix = "app.datasource")public SomeDataSource dataSource() {return new SomeDataSource();}}以下示例显示如何通过设置财产来定义数据源:
app.datasource.url=jdbc:h2:mem:mydb
app.datasource.username=sa
app.datasource.pool-size=30
假设SomeDataSource具有URL、用户名和池大小的常规JavaBean财产,这些设置将在DataSource可用于其他组件之前自动绑定。
Spring Boot还提供了一个名为DataSourceBuilder的实用程序生成器类,可以用来创建一个标准数据源(如果它位于类路径上)。构建器可以根据类路径上的可用内容检测要使用的对象。它还基于JDBCURL自动检测驱动程序。
以下示例显示了如何使用DataSourceBuilder创建数据源:
import javax.sql.DataSource;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;@Configuration(proxyBeanMethods = false)
public class MyDataSourceConfiguration {@Bean@ConfigurationProperties("app.datasource")public DataSource dataSource() {return DataSourceBuilder.create().build();}}要使用该DataSource运行应用程序,只需要连接信息。还可以提供特定于池的设置。检查将在运行时使用的实现以了解更多详细信息。
以下示例显示了如何通过设置财产来定义JDBC数据源:
app.datasource.url=jdbc:mysql://localhost/test
app.datasource.username=dbuser
app.datasource.password=dbpass
app.datasource.pool-size=30
您可以通过强制连接池使用并返回专用实现而不是DataSource来解决这个问题。您不能在运行时更改实现,但选项列表将是显式的。
以下示例显示了如何使用DataSourceBuilder创建HikariDataSource:
import com.zaxxer.hikari.HikariDataSource;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;@Configuration(proxyBeanMethods = false)
public class MyDataSourceConfiguration {@Bean@ConfigurationProperties("app.datasource")public HikariDataSource dataSource() {return DataSourceBuilder.create().type(HikariDataSource.class).build();}}您甚至可以通过利用DataSourceProperties为您提供的功能来更进一步 — 也就是说,如果没有提供URL,则通过提供具有合理用户名和密码的默认嵌入式数据库。您可以轻松地从任何DataSourceProperties对象的状态初始化DataSourceBuilder,因此也可以注入Spring Boot自动创建的DataSource。但是,这会将您的配置分成两个命名空间:spring.datasource上的url、用户名、密码、类型和驱动程序,以及自定义命名空间(app.datasource)上的其余部分。为了避免这种情况,您可以在自定义命名空间上重新定义自定义DataSourceProperties,如下例所示:
import com.zaxxer.hikari.HikariDataSource;import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;@Configuration(proxyBeanMethods = false)
public class MyDataSourceConfiguration {@Bean@Primary@ConfigurationProperties("app.datasource")public DataSourceProperties dataSourceProperties() {return new DataSourceProperties();}@Bean@ConfigurationProperties("app.datasource.configuration")public HikariDataSource dataSource(DataSourceProperties properties) {return properties.initializeDataSourceBuilder().type(HikariDataSource.class).build();}}此设置使您与默认情况下Spring Boot为您所做的工作保持同步,除了(在代码中)选择了一个专用连接池,并且其设置在app.datasource.configuration子命名空间中公开。由于DataSourceProperties正在为您处理url/jdbcUrl转换,因此可以按如下方式进行配置:
app.datasource.url=jdbc:mysql://localhost/test
app.datasource.username=dbuser
app.datasource.password=dbpass
app.datasource.configuration.maximum-pool-size=30
二、配置两个数据源
如果需要配置多个数据源,可以应用上一节中描述的相同技巧。但是,您必须将DataSource实例之一标记为@Primary,因为未来的各种自动配置都希望能够按类型获取一个DataSource实例。
如果您创建自己的DataSource,自动配置将退出。在以下示例中,我们提供了与自动配置在主数据源上提供的功能集完全相同的功能集:
import com.zaxxer.hikari.HikariDataSource;
import org.apache.commons.dbcp2.BasicDataSource;import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
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.context.annotation.Primary;@Configuration(proxyBeanMethods = false)
public class MyDataSourcesConfiguration {@Bean@Primary@ConfigurationProperties("app.datasource.first")public DataSourceProperties firstDataSourceProperties() {return new DataSourceProperties();}@Bean@Primary@ConfigurationProperties("app.datasource.first.configuration")public HikariDataSource firstDataSource(DataSourceProperties firstDataSourceProperties) {return firstDataSourceProperties.initializeDataSourceBuilder().type(HikariDataSource.class).build();}@Bean@ConfigurationProperties("app.datasource.second")public BasicDataSource secondDataSource() {return DataSourceBuilder.create().type(BasicDataSource.class).build();}}这两个数据源也绑定为高级自定义。例如,您可以按如下方式配置它们:
app.datasource.first.url=jdbc:mysql://localhost/first
app.datasource.first.username=dbuser
app.datasource.first.password=dbpass
app.datasource.first.configuration.maximum-pool-size=30app.datasource.second.url=jdbc:mysql://localhost/second
app.datasource.second.username=dbuser
app.datasource.second.password=dbpass
app.datasource.second.max-total=30
您也可以将相同的概念应用于辅助DataSource,如下例所示:
import com.zaxxer.hikari.HikariDataSource;
import org.apache.commons.dbcp2.BasicDataSource;import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;@Configuration(proxyBeanMethods = false)
public class MyCompleteDataSourcesConfiguration {@Bean@Primary@ConfigurationProperties("app.datasource.first")public DataSourceProperties firstDataSourceProperties() {return new DataSourceProperties();}@Bean@Primary@ConfigurationProperties("app.datasource.first.configuration")public HikariDataSource firstDataSource(DataSourceProperties firstDataSourceProperties) {return firstDataSourceProperties.initializeDataSourceBuilder().type(HikariDataSource.class).build();}@Bean@ConfigurationProperties("app.datasource.second")public DataSourceProperties secondDataSourceProperties() {return new DataSourceProperties();}@Bean@ConfigurationProperties("app.datasource.second.configuration")public BasicDataSource secondDataSource(@Qualifier("secondDataSourceProperties") DataSourceProperties secondDataSourceProperties) {return secondDataSourceProperties.initializeDataSourceBuilder().type(BasicDataSource.class).build();}}前面的示例使用与Spring Boot在自动配置中使用的逻辑相同的逻辑在自定义命名空间上配置两个数据源。请注意,每个配置子命名空间都基于所选的实现提供高级设置。
三、使用 Spring 数据存储库
Spring Data可以创建各种风格的@Repository接口的实现。只要这些@Repository包含在@EnableAutoConfiguration类的同一包(或子包)中,Spring Boot就会为您处理所有这些问题。
对于许多应用程序,您只需要在类路径中放置正确的SpringData依赖项。jpa有一个spring-boot-starter数据jpa,mongodb有一个spring boot-starter-data mongodb,以及支持技术的各种其他启动器。首先,创建一些存储库接口来处理@Entity对象。
Spring Boot尝试根据找到的@EnableAutoConfiguration猜测@Repository定义的位置。要获得更多控制,请使用@EnableJpaRepositorys注释(来自SpringDataJPA)。
相关文章:
Spring Boot数据访问—(springboot 多数据源)—官方原版
Spring Boot 包含许多用于处理数据源的启动器,本文回答与执行此操作相关的问题。一、配置自定义数据源要配置自己的DataSource,请在配置中定义该类型的Bean。Spring Boot在任何需要的地方重用DataSource,包括数据库初始化。如果需要外部化某些…...
高燃!GitHub上标星75k+超牛的Java面试突击版
前言不论是校招还是社招都避免不了各种面试。笔试,如何去准备这些东西就显得格外重要。不论是笔试还是面试都是有章可循的,我这个有章可循‘说的意思只是说应对技术面试是可以提前准备。运筹帷幄之后,决胜千里之外!不打毫无准备的仗,我觉得大…...
grid宫格布局新手快捷上手-f
前言 grid 网上有很多,但都是大而全的,感觉新人上手很吃力,本文仅以最快捷的方式进行介绍,如何使用grid宫格布局 本文是新人上手,若想了解更多grid布局,请阅读其他文章 使用 声明布局 display: grid;声…...
面试必刷101 Java题解 -- part 3
part1 – https://blog.csdn.net/qq_41080854/article/details/129204480 part2 – https://blog.csdn.net/qq_41080854/article/details/129224785 面试必刷101 Java题解 -- part 3动规五部曲71、斐波那契数列72、跳台阶73、最小花费爬楼梯74、最长公共子序列(二)75、最长公共…...
干货满满!MES的简介和运用
导读 谈及MES必须先谈生产,生产体系模型如图所示,涉及人、财、物、信息等资源,产、供、销等环节,以及供应商、客户、合作伙伴等。 其中,生产管理是通过对生产系统的战略计划、组织、指挥、实施、协调、控制等活动&…...
【ElasticSearch系列-01】初识以及安装elasticSearch
elasticSearch入门和安装一,elasticSearch入门1,什么是elasticSearch2,elasticSearch的底层优点2.1,全文检索2.2,倒排索引2.2.1,正排索引2.2.2,倒排索引2.2.3,倒排索引解决的问题2.2…...
【Leedcode】栈和队列必备的面试题(第一期)
栈和队列必备的面试题(第一期) 文章目录栈和队列必备的面试题(第一期)一、题目二、思路(图解)三、存在的问题与隐患(报错提示)(1)s中只有右括号,无…...
Unity 渲染流程管线
渲染流程图可以把它理解为一个流程,就是我们告诉GPU一堆数据,最后得出来一副二维图像,而这些数据就包括了”视点、三维物体、光源、照明模型、纹理”等元素。参考如下图(来自视频)CPU应用阶段剔除视锥剔除由Unity依据Camera直接完成ÿ…...
c++之引用
目录 引用的概念 引用做函数参数 引用的本质 常引用 引用的概念 在c中新增加了引用的概念,引用可以看作一个已定义变量的别名。 引用的语法:Type &name var; int main() {int a 10;int &b a;printf("b%d\n", b);printf(&quo…...
Java-扑克牌的创建以及发放
Java-扑克牌的创建以及发放题目:创建一个扑克牌(不需要包含大小王),分别分发给3个人,一个人发5张牌,输出结果要求包含全套牌(52张牌),以及3个人各自的牌的花色以及数字。1.扑克牌的源代码2.扑克牌运行结果3.扑克牌代码…...
华为OD机试题,用 Java 解【开放日活动】问题
最近更新的博客 华为OD机试题,用 Java 解【停车场车辆统计】问题华为OD机试题,用 Java 解【字符串变换最小字符串】问题华为OD机试题,用 Java 解【计算最大乘积】问题华为OD机试题,用 Java 解【DNA 序列】问题华为OD机试 - 组成最大数(Java) | 机试题算法思路 【2023】使…...
yarn run serve报错Error: Cannot find module ‘@vue/cli-plugin-babel‘ 的解决办法
问题概述 关于这个问题,是在构建前端工程的时候遇到的,项目构建完成后,“yarn run serve”启动项目时,出现的问题:“ Error: Cannot find module ‘vue/cli-plugin-babel‘ ” 如下图: 具体信息如下&…...
【LeetCode】剑指 Offer(11)
目录 题目:剑指 Offer 29. 顺时针打印矩阵 - 力扣(Leetcode) 题目的接口: 解题思路: 代码: 过啦!!! 写在最后: 题目:剑指 Offer 29. 顺时针…...
【英语】托福单词 近义/形近 分类汇总(更新中......)
transition 转变 过渡; transmit 传送(信息、信号) 传播(疾病) 传达(思想) transaction 交易 transact 做业务 做交易 translucent 半透明的 transparent 透明的 vague 模糊的 含糊的 笼统的 op…...
面试了一个32岁的程序员,一个细节就看出来是培训班的····
首先,我说一句:培训出来的,优秀学员大有人在,我不希望因为带着培训的标签而无法达到用人单位和候选人的双向匹配,是非常遗憾的事情。 最近,在网上看到这样一个留言,引发了程序员这个圈子不少的…...
Qt软件开发: 编写MQTT客户端连接各大物联网平台(主题订阅、发布)
一、前言 最近几年物联网发展的比较迅速,国内各大厂商都推出物联网服务器,面向设备厂商、个人开发者、提供云端一体的设备智能化服务,利用现成的物联网服务器可以快速实现IoT设备智能化的需求。方便企业、个人接入设备,低成本完成物联网开发。 比如:阿里云、百度云、华为…...
PTA L1-059 敲笨钟(详解)
前言:内容包括:题目,代码实现,大致思路,代码解读 题目: 微博上有个自称“大笨钟V”的家伙,每天敲钟催促码农们爱惜身体早点睡觉。为了增加敲钟的趣味性,还会糟改几句古诗词。其糟改…...
【设计模式】9.桥接模式
概述 现在有一个需求,需要创建不同的图形,并且每个图形都有可能会有不同的颜色。我们可以利用继承的方式来设计类的关系: 我们可以发现有很多的类,假如我们再增加一个形状或再增加一种颜色,就需要创建更多的类。 试…...
五、线程池
文章目录什么是线程池JDK自带的构建线程池的方式newFixedThreadPoolnewSingleThreadExecutornewCachedThreadPoolnewScheduleThreadPoolnewWorkStealingPoolThreadPoolExecutor应用&源码剖析为什么要自定义线程池ThreadPoolExecutor应用ThreadPoolExecutor源码剖析ThreadPo…...
ROS从入门到精通2-6:Rviz可视化进阶(画坐标轴、直线、平面、圆柱等)
目录0 专栏介绍1 Rviz可视化2 环境配置3 使用方法4 测试用例0 专栏介绍 本专栏旨在通过对ROS的系统学习,掌握ROS底层基本分布式原理,并具有机器人建模和应用ROS进行实际项目的开发和调试的工程能力。 🚀详情:《ROS从入门到精通》…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...
华为云AI开发平台ModelArts
华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...
ssc377d修改flash分区大小
1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...
无法与IP建立连接,未能下载VSCode服务器
如题,在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈,发现是VSCode版本自动更新惹的祸!!! 在VSCode的帮助->关于这里发现前几天VSCode自动更新了,我的版本号变成了1.100.3 才导致了远程连接出…...
Leetcode 3577. Count the Number of Computer Unlocking Permutations
Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...
在四层代理中还原真实客户端ngx_stream_realip_module
一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡(如 HAProxy、AWS NLB、阿里 SLB)发起上游连接时,将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后,ngx_stream_realip_module 从中提取原始信息…...
Java多线程实现之Callable接口深度解析
Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...
GitHub 趋势日报 (2025年06月08日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...
Docker 本地安装 mysql 数据库
Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker ;并安装。 基础操作不再赘述。 打开 macOS 终端,开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...
