Spring数据源

⭐作者介绍:大二本科网络工程专业在读,持续学习Java,努力输出优质文章
⭐作者主页:@逐梦苍穹
⭐所属专栏:JavaEE、Spring

目录

  • 1、简介
  • 2、作用
  • 3、开发步骤
    • 3.1、导入坐标
    • 3.2、创建对象
      • c3p0
      • druid
      • 提取jdbc.properties
      • 读取配置文件
    • 3.3、Spring设置数据源
      • 注意
      • 再解耦
    • 3.4、使用数据源
      • 手动
      • 使用jdbc.properties
      • Spring容器创建

1、简介

在这里插入图片描述

Spring框架提供了多种数据源选项,常见的有以下几种:

  1. JDBC数据源:Spring提供了对JDBC数据源的支持,可以通过配置数据源参数来连接各种关系型数据库,如MySQL、Oracle、PostgreSQL等。你可以使用Spring的JdbcTemplate或者ORM框架(如Hibernate)来执行SQL操作。
  2. Apache Tomcat数据源:Spring支持使用Apache Tomcat提供的连接池作为数据源。Tomcat数据源是一个成熟的连接池实现,可以高效地管理数据库连接。
  3. HikariCP数据源:HikariCP是一个快速高效的连接池,被广泛用于Java应用程序中。Spring可以集成HikariCP作为数据源,通过配置参数来管理连接池。
  4. C3P0数据源:C3P0是一个受欢迎的连接池库,也可以作为Spring的数据源。你可以配置C3P0连接池的参数,以满足应用程序对数据库连接的需求。
  5. 还有其他第三方连接池库,如DBCP、BoneCP等,也可以与Spring集成作为数据源。

使用Spring数据源,你可以在Spring的配置文件中定义数据源,并通过注入的方式在应用程序中使用它。这样,你就可以方便地访问数据库,并执行相应的数据库操作。

2、作用

Spring数据源的主要作用是提供数据库连接池,以管理和分配数据库连接。数据库连接是与数据库交互的关键资源之一,每次与数据库建立连接的过程都需要进行网络通信和身份验证,这是一个开销较大的操作。通过使用数据源,可以避免频繁地创建和销毁数据库连接,提高应用程序的性能和响应速度。
以下是Spring数据源的一些主要作用:

  1. 连接管理:数据源负责创建、管理和维护数据库连接。它可以在应用程序启动时初始化一定数量的连接,并在需要时分配连接给应用程序。连接使用完毕后,数据源可以将连接归还到连接池中,以便其他请求可以继续复用该连接,减少连接创建和销毁的开销。
  2. 连接池管理:数据源通过连接池来管理数据库连接。连接池维护一定数量的可用连接,当应用程序请求连接时,从连接池中获取一个可用连接分配给应用程序。如果连接池中没有可用连接,数据源可以根据配置的策略来创建新的连接或等待可用连接释放。
  3. 连接配置:数据源允许你配置数据库连接的参数,如数据库驱动、URL、用户名、密码等。这些配置可以集中管理,便于维护和修改,而不需要在应用程序的多个地方进行重复配置。
  4. 事务管理:Spring数据源与Spring的事务管理框架紧密集成,可以为应用程序提供事务管理的功能。它可以与Spring的声明式事务管理一起使用,自动管理事务的起始、提交和回滚,并确保在事务范围内的数据库操作的一致性和隔离性。
  5. 故障恢复:数据源可以处理数据库连接的异常情况,如连接超时、连接断开等。它可以检测到连接的异常状态,并尝试重新建立连接,从而提高应用程序的可靠性和容错性。

通过使用Spring数据源,应用程序可以更高效地管理数据库连接,提升应用性能和扩展性。同时,数据源还提供了一些额外的功能,如连接池配置、事务管理等,使开发人员能够更轻松地进行数据库操作和事务管理。

3、开发步骤

① 导入数据源的坐标和数据库驱动坐标
② 创建数据源对象
③ 设置数据源的基本连接数据
④ 使用数据源获取连接资源和归还连接资源

3.1、导入坐标

在这里插入图片描述

3.2、创建对象

c3p0

ComboPooledDataSource dataSource = new ComboPooledDataSource();
dataSource.setDriverClass("com.mysql.jdbc.Driver");
dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/test");
dataSource.setUser("root");
dataSource.setPassword("root");
Connection connection = dataSource.getConnection();
System.out.println(connection);
connection.close();

druid

DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/test");
dataSource.setUsername("root");
dataSource.setPassword("root");
DruidPooledConnection connection = dataSource.getConnection();
System.out.println(connection);
connection.close();

提取jdbc.properties

前面两种创建方式耦合度太高,下面进行解耦合:提取jdbc.properties配置文件:
在这里插入图片描述
在这里插入图片描述

读取配置文件

配置文件里面的内容,实际上就是键值对,类如jdbc.url是一种约定俗成的写法,但是实际上如果写成username=root也无可厚非,不会报错,但是不建议这样做
在这里插入图片描述

ResourceBundle.getBundle方法是Java提供的用于加载资源束(Resource Bundle)的静态方法。它的使用方式如下:
通过基名加载默认的资源束:ResourceBundle rb = ResourceBundle.getBundle(“bundleName”);
这种用法会根据指定的bundleName加载默认的资源束。
默认的资源束文件的命名约定是bundleName.properties,其中bundleName是资源束的基名。

3.3、Spring设置数据源

可以将DataSource的创建权交由Spring容器去完成

  1. DataSource有无参构造方法,而Spring默认就是通过无参构造方法实例化对象的
  2. DataSource要想使用需要通过set方法设置数据库连接信息,而Spring可以通过set方法进行字符串注入

Druid数据源:
在这里插入图片描述

C3p0数据源:
在这里插入图片描述

注意

xml配置数据源只能有一个!
在这里插入图片描述

再解耦

上面配置的时候,也是把配置信息写在applicationContext.xml里面,这样依旧耦合。
下面结合jdbc.properties和applicationContext.xml,使用spring提供的命名空间引入配置文件,从而实现对配置信息进行抽取:
在这里插入图片描述
在这里插入图片描述

3.4、使用数据源

手动

在这里插入图片描述
在这里插入图片描述

使用jdbc.properties

在这里插入图片描述

Spring容器创建

在这里插入图片描述

DataSource是一个数据源对象:
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Git】

学习来自于: 女朋友乱用Git,差点把我代码删了。。。 一些常用的Git 知识点整理 关于Git这一篇就够了 Git基本命令大全 30分钟精通Git,学不会来找我 Git 版本管理 | 莫烦PYTHON Git 代码版本管理教程 文章目录 【前言】集中式与分布式的…

【微服务系统设计】系统设计基础:速率限制器

什么是速率限制器? 速率限制是指防止操作的频率超过定义的限制。在大型系统中,速率限制通常用于保护底层服务和资源。速率限制一般在分布式系统中作为一种防御机制,使共享资源能够保持可用性。 速率限制通过限制在给定时间段内可以到达您的 A…

分布式光伏并网防孤岛保护装置AM5SE-IS

分布式光伏并网防孤岛保护装置AM5SE-IS 应用场景 防孤岛原理:防孤岛保护装置检测到并网点有逆功率、频率突变、 等异常数据时,即发生孤岛现象时,装置可配合断路器快速切除并网点,使本站与电网侧快速脱离,保证整个电站…

国内疫情地图和省级疫情地图

基础地图演示 from pyecharts.charts import Mapfrom pyecharts.options import VisualMapOpts map Map() data [ ("北京", 99), ("上海", 199), ("湖南", 299), ("台湾", 199), ("安徽", 299), ("广州", 399…

git的clone,上传与upstream同步

文章目录 clone同步 clone clone他人项目,git到自己的项目 rm -rf .git .git存放原始项目的日志信息,这里需要添加自己的日志信息,需要删除重写。也可手动删除 git init 初始化文件,依据本地日志信息生产.git文件 git add 目标文…

视屏消音工具,支持指定词语,或者短句消音

这里写自定义目录标题 一个使用python开发的视频消音工具 一个使用python开发的视频消音工具 1.支持上传文件字幕,进行视屏整段语句进行静音处理 2.支持通过指定的词语或者句子进行精确的消音处理 3.支持输入多个词语,或者断句进行消音处理 页面比较简陋,但功能应该满足日常使…

【C语言15】单链表,(对于二级指针与一级指针应用的详细讲述)

文章目录 单链表1.单链表的介绍2.单链表的实现2.1.1单链表结点的创建与销毁2.1.2单链表尾插2.1.3单链表打印2.1.4尾删2.1.5头插2.1.6头删2.1.7查找2.1.8在pos位置之后插入数据2.1.9删除pos位置 单链表 1.单链表的介绍 链表是一种物理存储结构上非连续、非顺序的存储结构&#…

【MyBatis 学习一】认识MyBatis 第一个MyBatis查询

目录 一、认识MyBatis 1、MyBatis是什么? 2、为什么要学习MyBatis? 二、配置MyBatis环境 1、建库与建表 2、创建新项目 3、xml文件配置 (1)配置数据库连接 (2)配置 MyBatis 中的 XML 路径 三、测试&#x…

优惠券秒杀(二)

库存超卖问题分析 库存超卖问题其本质就是多个线程操作共享数据产生的线程安全问题,即当一个线程在执行操作共享数据的多条代码的过程中,其他线程也参与了进来,导致了线程安全问题的产生。例如:线程1发送请求,查询库存…

所有docker命令无效,解决办法

目录 ■前言 今天使用docker时,所有命令无效 ■解决办法如下 1.停止docker服务 2.查看状态 3.删除之前的docker相关的文件 4.再次查看状态 5.使用相关命令 (好用了) 6.重新下载镜像 ■前言 今天使用docker时,所有命令无…

MyBatis(简化数据库操作的持久层框架)--快速入门[上]

😀前言 本篇博文是我在学习过程中的记录,分为上中下三个篇章,记录了我的一些学习心得,希望能够帮助到你😊 🏠个人主页:晨犀主页 🧑个人简介:大家好,我是晨犀&…

炎热夏天,VR全景让你宅家也能逛风景

夏天的快乐都是空调给的,进入三伏天气以来,连续的高温让人坐着都是一身汗,尤其是活泼好动的小朋友们,不出去玩那是不可能的。不妨改变下策略,让小朋友们转战线上,还能学习知识,是不是美滋滋呢~~…

FPGA XDMA 中断模式实现 PCIE3.0 AD7606采集 提供2套工程源码和QT上位机源码

目录 1、前言2、我已有的PCIE方案3、PCIE理论4、总体设计思路和方案AD7606数据采集和缓存XDMA简介XDMA中断模式QT上位机及其源码 5、vivado工程1--BRAM缓存6、vivado工程2--DDR4缓存7、上板调试验证8、福利:工程代码的获取 1、前言 PCIE(PCI Express&am…

BMapGL -- 生成多个maker,获取指定标识的maker,并清除他们

需求描述: 在使用 Baidu Map JavaScript API 创建多个标记时,可以为每个标记设置一个唯一的标识符(identifier),以便在以后可以根据标识符获取特定的标记,并清除它们。 代码: // 创建地图实例 var map = new BMapGL.Map("container");// 创建标记1 var poin…

Jmeter配置起来太繁琐?试试RunnerGo

在用jmeter做性能测试时想看完整一点的测试报告,想配置阶梯模式来压测,想配置不同的接口并发这些都需要安装插件并且影响机器性能,想做自动化测试还得放到jenkins,这些配置起来太繁琐。今天给大家推荐一款测试平台RunnerGo&#x…

1334179-85-9,BTTAA,是各种化学生物学实验中生物偶联所需

资料编辑|陕西新研博美生物科技有限公司小编MISSwu​ BTTAA试剂 | 基础知识概述(部分): 中文名称:2-[4-({双[(1-叔丁基-1H-1,2,3-三唑-4-基)甲基]氨基}甲基)-1H-1,2,3-三唑-1-基]乙酸 英文名称:BTTAA CAS号:1334179-8…

如何区分接口测试和功能测试

接口测试和功能测试的区别: 2023最新Jmeter接口测试从入门到精通(全套项目实战教程) 本文主要分为两个部分: 第一部分:主要从问题出发,引入接口测试的相关内容并与前端测试进行简单对比,总结两者…

护网行动:ADSelfService Plus引领企业网络安全新纪元

随着信息技术的飞速发展,企业网络的重要性变得愈发显著。然而,随之而来的网络安全威胁也日益增多,网络黑客和恶意软件不断涌现,给企业的数据和机密信息带来巨大风险。在这个信息安全威胁层出不穷的时代,企业急需一款强…

微服务学习笔记-----Nacos安装教程(Windows和Linux版本)

Nacos安装教程 Nacos安装指南1.Windows安装1.1.下载安装包1.2.解压1.3.端口配置1.4.启动1.5.访问 2.Linux安装2.1.安装JDK2.2.上传安装包2.3.解压2.4.端口配置2.5.启动 3.Nacos的依赖 Nacos安装指南 1.Windows安装 开发阶段采用单机安装即可。 1.1.下载安装包 在Nacos的Git…

EAP设备自动化控制系统在设备数采和控制方面的优势

随着科技的不断进步和工业自动化的发展,EAP(Equipment Automation Program)设备自动化控制系统在各个行业中扮演着越来越重要的角色。作为连接MES(Manufacturing Execution System)和设备层的沟通桥梁,EAP系…