Spring (23)如何在Spring中配置数据源

在Spring中配置数据源是一个基本且重要的任务,特别是在构建依赖于数据库操作的应用程序时。数据源(DataSource)是数据库连接的工厂,Spring通过数据源抽象简化了数据库连接的管理。配置数据源通常涉及定义一个或多个DataSourcebean,这些bean可以通过不同方式配置,例如Java配置、XML配置或通过外部配置文件(如application.properties或application.yml)。

使用Java配置

在基于Java的配置中,你可以使用@Configuration类直接配置数据源。以下是使用HikariCP作为连接池的示例:

import com.zaxxer.hikari.HikariDataSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.sql.DataSource;@Configuration
public class DataSourceConfig {@Beanpublic DataSource dataSource() {HikariDataSource dataSource = new HikariDataSource();dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/mydatabase");dataSource.setUsername("user");dataSource.setPassword("password");dataSource.setMaximumPoolSize(10); // 设置连接池的最大连接数return dataSource;}
}

在上述配置中,dataSource方法通过创建一个HikariDataSource实例来定义了一个DataSource bean。这里,我们设置了数据库的URL、用户名、密码以及连接池的最大连接数。

使用XML配置

尽管Java配置是推荐的方式,但在一些项目中,仍然可以使用XML来配置数据源。以下是相应的XML配置示例:

<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource" destroy-method="close"><property name="driverClassName" value="com.mysql.cj.jdbc.Driver" /><property name="jdbcUrl" value="jdbc:mysql://localhost:3306/mydatabase" /><property name="username" value="user" /><property name="password" value="password" /><property name="maximumPoolSize" value="10" /></bean></beans>

使用外部配置文件

在现代Spring应用程序中,通常使用外部配置文件(如application.properties或application.yml)配置数据源,特别是在使用Spring Boot时。这种方式使得配置更加灵活和可维护。

application.properties示例:

spring.datasource.url=jdbc:mysql://localhost:3306/mydatabase
spring.datasource.username=user
spring.datasource.password=password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.hikari.maximum-pool-size=10

或使用application.yml

spring:datasource:url: jdbc:mysql://localhost:3306/mydatabaseusername: userpassword: passworddriver-class-name: com.mysql.cj.jdbc.Driverhikari:maximum-pool-size: 10

Spring Boot会自动配置数据源,只要spring.datasource.*相关属性被正确设置。Spring Boot默认使用HikariCP作为连接池,但你也可以通过设置不同的属性来使用其他连接池。

源码解析

在Spring Boot中,数据源的自动配置是通过DataSourceAutoConfiguration类实现的。这个类根据应用的配置属性(如spring.datasource.*)来配置数据源。具体的数据源类型(比如HikariDataSource、Tomcat DataSource等)取决于类路径中包含的库以及配置属性。

DataSourceAutoConfiguration使用条件注解(如@ConditionalOnClass@ConditionalOnProperty)来判断哪个数据源应该被自动配置。例如,如果类路径中存在HikariCP,那么将默认选择HikariDataSource作为数据源实现。

总结

在Spring中配置数据源涉及到多个方面,包括选择合适的连接池、通过Java代码或XML定义DataSource bean,或者在更现代的应用中,通过外部配置文件配置数据源属性。理解数据源的配置方式和如何通过Spring来管理数据库连接对于构建健壮的数据访问层是至关重要的。在Spring Boot项目中,数据源的配置被大大简化,大多数情况下你只需要通过外部配置文件指定数据库连接信息即可。

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

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

相关文章

ssm145基于java的电脑硬件库存管理系统+jsp

电脑硬件库存管理系统的设计与实现 摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。针对电脑硬件库存信息管理混乱&…

【设计模式】创建型-抽象工厂模式

前言 在软件开发领域&#xff0c;设计模式是一种被广泛接受的解决方案&#xff0c;用于解决特定问题并提供可维护和可扩展的代码结构。抽象工厂模式&#xff08;Abstract Factory Pattern&#xff09;是其中之一&#xff0c;它提供了一种方法来创建一系列相关或相互依赖的对象…

Prime算法构造最小生成树(加点法)

一、算法逻辑 想要轻松形象理解Prime的算法逻辑&#xff0c;视频肯定比图文好。 小编看过很多求相关的教学视频&#xff0c;这里选出一个我认为最好理解的这一款安利给大家。 因为他不仅讲解细致&#xff0c;而且还配合了动画演示&#xff0c;可以说把一个抽象的东西讲的非常…

linux下重启oracle数据库步骤

Linux下重启oracle数据库步骤&#xff1a; 1.使用oracle用户登录数据库服务器&#xff08;root登录的话进入数据库时会找不到sqlplus命令&#xff09; su – oracle 2.通过数据库管理员sysdba进入oracle数据库 sqlplus / as sysdba 3.关闭数据库 shutdown immediate &#xff0…

编码电机脉冲数统计,测速

脉冲统计代码 int reducation 90;//减速比&#xff0c;根据电机参数设置&#xff0c;比如 15 | 30 | 60 int pulse 11; //编码器旋转一圈产生的脉冲数该值需要参考商家电机参数 int per_round pulse * reducation * 4;//车轮旋转一圈产生的脉冲数 long start_time millis…

Linux 使用 yum安装 ELK服务,yum 安装elasticsearch和Kibana(未写完)

文章目录 环境准备ELK组件介绍安装Elasticsearch安装Kibana 丢弃下载ELK 服务安装包Elasticsearch安装 Tips:关闭elasticsearch https 环境准备 ELK组件介绍 ElasticSearch &#xff1a; 是一个近实时&#xff08;NRT&#xff09;的分布式搜索和分析引擎&#xff0c;它可以用…

CentOS6.5 下编译 FreeSWITCH 1.2.23 版本

命题作文&#xff0c;慢慢来&#xff0c;一边做&#xff0c;一边记录。 老古董了&#xff0c;查资料很不容易&#xff0c;但朋友说不着急&#xff0c;这很好。 生命的意义在于折腾&#xff0c;不是吗&#xff1f; 先下载 CentOS6.5&#xff0c; 查了下资料&#xff0c;最后…

PyQt6实战 | 绘图画板程序 自由绘制 直线 矩形 椭圆 画笔颜色和大小选择

引言 本文将介绍如何使用 PyQt6 创建一个简单的绘图应用程序。这个应用程序实现了常用的绘图功能&#xff0c;如自由绘制、画直线、矩形和椭圆。此外&#xff0c;还提供了选择画笔颜色、调整画笔宽度、清空画布和导出图像的功能。 环境设置 首先&#xff0c;需要安装 PyQt6&a…

OrangePi AIpro评测 - AI服务篇

0. 环境 ●OrangePi AIpro ●windows电脑 ●路由器 之前我已经对OrangePi AIpro进行了些嵌入式基本操作的评测。接下来进行AI部分。来看看华为昇腾的特别之处。 1.普通CPU和AI CPU 这里请提前用调试串口或者ssh到板子上&#xff0c;记得用户名和密码&#xff0c;分别是HwHiAiUs…

[Dragon Knight CTF] crypto/pwn

周末很忙&#xff0c;哪个比赛都没打&#xff0c;周一把一个小赛回顾一下。 这个比完马上就发了官方WP&#xff0c;我会的大概跟我作的一样&#xff0c;不会的也记下来。虽然没报名但是马上就把题移到了练习区&#xff0c;真是良心赛。 Crypto Crypto_签到 from Crypto.Uti…

【Mybatis】映射文件获取新增记录的id

我们在讲JDBC的时候讲过在插入新数据值的时候需要获得到自动生成的那个主键id的值 ①获取PreparedStatement的对象的时候 PreparedStatement st conn.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS ); ②在执行SQL语句后 st.executeUpdate();ResultSet rs st.ge…

web前端三大主流框架

Web前端开发的三大主流框架是&#xff1a; 1. **React**&#xff1a; - **简介**&#xff1a;由Facebook开发和维护的开源JavaScript库&#xff0c;用于构建用户界面&#xff0c;尤其是单页应用程序。 - **特点**&#xff1a;虚拟DOM、高效的组件化开发、单向数据流、强…

马斯克:AI时代人人高收入,不需要工作,商品服务不再短缺,可能性80%

当前人工智能现状和未来如何&#xff1f;AI时代下&#xff0c;人类未来会发生哪些变化&#xff1f; 埃隆马斯克&#xff08;Elon Musk&#xff09;在2024 VivaTech大会上分享了关于地球未来的诸多愿景。 投资作业本课代表摘录了其中的要点&#xff0c;分享给大家&#xff1a…

Golang的基本使用

目录 变量的声明 Golang常用容器 defer 有趣的多态 结构体标签和reflect 反射 Golang最强的协程 channel go可能造成的内存泄露 变量的声明 方法 1:有类型,有var,不赋值 在Golang中默认值为0 方法 2:无类型,有var,赋值 方法 3:无类型,无var,赋值 多变量声明 多变…

强大友好的Nginx扩展:VeryNginx

VeryNginx&#xff1a; 简化Web管理&#xff0c;增强网站防御- 精选真开源&#xff0c;释放新价值。 概览 VeryNginx是一个基于lua-nginx-module&#xff08;openresty&#xff09;的高效、友好的Nginx版本&#xff0c;专为满足现代Web应用的需求而设计。它不仅提供了强大的We…

spring-boot 3.2 + spring-boot-starter-quartz + HikariCP配置

第一步&#xff0c;添加 spring-boot-starter-quartz 的 maven 依赖。 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-quartz</artifactId> </dependency> 第二步&#xff0c;在 ap…

Adobe Animate AN v24.0.2 安装教程 (动画特效设计及合成工具)

Adobe系列软件安装目录 一、Adobe Photoshop PS 25.6.0 安装教程 (最流行的图像设计软件) 二、Adobe Media Encoder ME v24.3.0 安装教程 (视频和音频编码渲染工具) 三、Adobe Premiere Pro v24.3.0 安装教程 (领先的视频编辑软件) 四、Adobe After Effects AE v24.3.0 安装…

什么是元编程?JavaScript中怎么体现?

历史小剧场 老子曾经说过&#xff0c;最好的国家&#xff0c;是老百姓不知道统治者是谁。从某个角度讲&#xff0c;万历同志做到了。—《明朝那些事儿》 前言 一句话&#xff0c;元编程就是通过代码来编程代码。 即通过代码来生产、修改、操作代码的一种能力。 很多语言都有这…

SSE(Server Sent Event) 踩坑留念

整条链路是 客户端A --> 服务端 A —> 服务端 B 我负责服务端 A 此时要注意 Client 中的 processes 的写法 Post(value “/v2/xx”, processes MediaType.TEXT_EVENT_STREAM) 这样写是一直报错的 改成下面的写法才可以 Post(value “/v2/xx”, processes MediaT…

【荐闻】空中目标检测综述

https://t.zsxq.com/tgUjbhttps://t.zsxq.com/tgUjb 这篇综述论文全面回顾了空中目标检测的最新进展&#xff0c;包括五个不平衡问题、相关方法、实际应用和性能评估。以下是对论文内容的详细描述&#xff1a; 1&#xff09;引言&#xff1a;介绍了空中目标检测的概念&#x…