java中的数据源

news2024/9/22 15:34:08

为什么要使用数据源

jdbc是什么

JDBC 就是使用Java语言操作关系型数据库的一套API,我们开发的同一套Java代码是无法操作不同的关系型数据库,因为每一个关系型数据库的底层实现细节都不一样。如果这样,问题就很大了,在公司中可以在开发阶段使用的是MySQL数据库,而上线时公司最终选用oracle数据库,我们就需要对代码进行大批量修改,这显然并不是我们想看到的。我们要做到的是同一套Java代码操作不同的关系型数据库,而此时sun公司就指定了一套标准接口(JDBC),JDBC中定义了所有操作关系型数据库的规则。众所周知接口是无法直接使用的,我们需要使用接口的实现类,而这套实现类(称之为:驱动)就由各自的数据库厂商给出。

JDBC的好处

1 .JDBC本质

  • 官方(sun公司)定义的一套操作所有关系型数据库的规则,即接口

  • 各个数据库厂商去实现这套接口,提供数据库驱动jar包

  • 我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类

2.JDBC好处

  • 各数据库厂商使用相同的接口,Java代码不需要针对不同数据库分别开发

  • 可随时替换底层数据库,访问数据库的Java代码基本不变

以后编写操作数据库的代码只需要面向JDBC(接口),操作哪儿个关系型数据库就需要导入该数据库的驱动包,如需要操作MySQL数据库,就需要再项目中导入MySQL数据库的驱动包。

 JDBC入门

  • 创建工程,导入驱动jar包

  • 注册驱动

    Class.forName("com.mysql.jdbc.Driver");
  • 获取连接

    Connection conn = DriverManager.getConnection(url, username, password);

    Java代码需要发送SQL给MySQL服务端,就需要先建立连接

  • 定义SQL语句

    String sql =  “update…” ;
  • 获取执行SQL对象

    执行SQL语句需要SQL执行对象,而这个执行对象就是Statement对象

    Statement stmt = conn.createStatement();
  • 执行SQL

    stmt.executeUpdate(sql);  
  • 处理返回结果

  • 释放资源

直接创建数据库连接的坏处

之前我们代码中使用连接是没有使用都创建一个Connection对象,使用完毕就会将其销毁。这样重复创建销毁的过程是特别耗费计算机的性能的及消耗时间的。

而数据库使用了数据库连接池后,就能达到Connection对象的复用,如下图

连接池是在一开始就创建好了一些连接(Connection)对象存储起来。用户需要连接数据库时,不需要自己创建连接,而只需要从连接池中获取一个连接进行使用,使用完毕后再将连接对象归还给连接池;这样就可以起到资源重用,也节省了频繁创建连接销毁连接所花费的时间,从而提升了系统响应的速度。

数据源,连接池是什么

连接池、数据源

数据库
数据库是一个容器,包含了很多数据,当然这些数据可能存在不同的小容器(表)里面。
若用水来形容数据,数据库就是水库。

数据源
数据源是连接到数据库的一类路径,它包含了访问数据库的信息(地址、用户名、密码)。
数据源就像是排水管道。Java中的数据源就是连接到数据库的一条路径,数据源中并无真正的数据,它仅仅记录的是你连接到哪个数据库,以及如何连接。DataSource的创建可以有不同的实现。DataSource通常被称为数据源,它包含连接池 和连接池管理 两部分,习惯上也经常把DataSource称为连接池。

数据库连接
数据库连接是根据数据源产生的实际连接上数据库的路径。
数据库连接就像是管道里面的水管,这些水管都按照管道(数据源)的配置访问数据库。当打开了数据连接的时候,就像是打开了水管一样。

数据库连接池
是数据源里面的一种技术,用于存放空闲的连接,以备不时之需,每个数据源可能会配置数据库连接池,就像是排水管道的自动化系统。据库连接池的作用就是维护数据库连接,减少创建和删除数据库连接的操作,来达到减少数据访问时耗的目的。

连接池思想

在系统初始化的时候,将数据库连接对象(Connection) 存储在内存中,当用户需要访问数据库时候,并不是建立一个新的连接,而是从连接池中取出一个已经建立好的空闲连接对象。而连接池负责分配、管理、释放数据库连接对象。注意的是:连接池是由容器(比如tomcat) 提供的,同时容器也管理着连接池。
 

springboot中支持的数据源

    1. org.apache.tomcat.jdbc.pool.DataSource
    2. com.zaxxer.hikari.HikariDataSource
    3. org.apache.commons.dbcp.BasicDataSource
    4. org.apache.commons.dbcp2.BasicDataSource
    /*
    以上四种数据源都定义在
    org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration中
    */
 对于以上4种数据源,Springboot 启动时会自动加载org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration类 ,
通过自动配置为其生成DataSource Bean,DataSource Bean默认只会生成一个。

四种数据源类型的生效先后顺序如下:

 Tomcat-JDBC--> Hikari --> Dbcp --> Dbcp2 
具体使用参考连接什么是数据源?如何配置数据源?-CSDN博客

第三方数据源Druid

Druid是一种基于JDBC规范的数据库连接池实现,它提供了比JDBC默认实现更加强大和灵活的连接池功能。Druid使用的是连接池的数据源,通过预先创建一定数量的数据库连接对象,并将这些连接对象存放在连接池中。当应用程序需要与数据库进行交互时,从连接池中获取一个可用的连接对象,使用完毕后归还给连接池。Druid连接池可以对连接进行统一管理,包括连接的分配、回收和维护等工作,同时也可以检测并处理连接的异常情况。Druid连接池还提供了丰富的监控和统计功能,可以帮助开发者更好地了解应用程序的数据库访问情况,优化数据库性能和稳定性。

特性和功能:

  1. 高性能:Druid连接池通过一些优化策略实现高性能的数据库连接获取和释放。其中包括使用预创建连接来减少连接获取的开销,以及通过连接池扩展机制来快速处理并发请求。此外,Druid还提供了连接的闲置检测和定时回收机制,以避免连接长时间占用资源。
  2. 监控统计:Druid连接池内置了强大的监控统计功能,可以实时监控连接池的状态、活跃连接数、请求频率、SQL执行情况等。它提供了一个内置的Web界面,可以方便地查看连接池的监控数据,并进行性能分析和故障排查。
  3. 防止泄露:Druid连接池可以检测和关闭泄露的连接,防止长时间占用数据库连接资源。它提供了一套完善的连接泄露检测和回收机制,以保证连接资源的有效利用。
  4. 数据库访问优化:Druid连接池支持连接的预处理、批量更新等优化操作,可以提高数据库的访问效率。它还提供了SQL执行的慢查询日志功能,可以帮助开发人员找出慢查询语句,并进行性能优化。
  5. 安全防护:Druid连接池提供了一些安全防护机制,如SQL防火墙、黑白名单过滤等。这些机制可以保护数据库免受恶意SQL注入等攻击。
  6. 配置灵活:Druid连接池的配置选项非常灵活,可以根据应用程序的需求进行定制。您可以设置连接池大小、最大连接数、连接超时时间、验证方式等参数,以满足不同场景的需求。

SpringBoot整合Druid数据源

(1)导入坐标

<!--引入druid数据源-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.2.6</version>
        </dependency>

  (2) application.yaml文件中添加如下配置:

spring:
  datasource:
    druid:
      driver-class-name: com.mysql.cj.jdbc.Driver
      url: jdbc:mysql://localhost:3306/springboot_test?characterEncoding=utf8&serverTimezone=UTC
      username: root
      password: root

 

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

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

相关文章

虚拟机Ubuntu - 环境配置

文章目录 安装虚拟机安装必要工具修改IP地址修改主机名安装Java方法一&#xff1a;apt 安装方法二&#xff1a;使用PPA仓库&#xff08;适用于Ubuntu 18.04以上版本&#xff09; 远程连接另一台宿主机的虚拟机方法一&#xff1a;NAT连接方法二&#xff1a;桥连接&#xff08;推…

selenium判断元素可点击、可见、可选

1、判断元素是否可以点击 判断元素是否可以点击&#xff0c;WebElement对象调用is_enabled() is_enabled()方法返回一个布尔值&#xff0c;若可点击返回&#xff1a;True。若不可点击则返回&#xff1a;False from selenium import webdriver import time from selenium.web…

LeetCode 热题 100 - 第1题:两数之和

LeetCode 热题 100 - 第1题:两数之和 原题题目理解普通的解题思路---遍历查找进阶的解题思路---哈希查找 原题 给定一个整数数组 nums和一个整数目标值target&#xff0c;请你在该数组中找出 和为目标值 target的那两个整数&#xff0c;并返回它们的数组下标。 你可以假设每种…

Docker 镜像常用命令总结

目录 1. Docker镜像相关命令(重点掌握) 1.1 docker pull 镜像名称 [:tag] 拉取镜像 1.2 docker search 镜向名称 (查询某个镜像) 1.3 docker images 列出当前主机上所有镜像 1.4 docker rmi 镜像ID 删除镜像 1.5 docker system df 查看所有镜像容器所占空间 2. Docker …

每日一练——快速合并2个有序数组

每日一练来喽~~~ 今天up主为大家分享一个&#xff0c;快速合并2个有序数组的法子&#xff0c;注意听哟&#xff01; 题目&#xff1a; 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2&#xff0c;另有两个整数 m 和 n &#xff0c;分别表示 nums1 和 nums2 中的元素数…

2、TB6600驱动器介绍【51单片机控制步进电机-TB6600系列】

摘要&#xff1a;本节介绍TB6600驱动器界面及关键参数设置 一、驱动器功能界面 二、关键参数 输入电压&#xff1a;DC9-42V 输出电流&#xff1a;0.5-4A 最大功耗&#xff1a;160W 细分设置&#xff1a;1,2/A,2/B,4,8,16,32 工作温度&#xff1a;-10~45C 信号口驱动电流&…

用ST-LINK 出现连接失败【已解决】

出现的问题&#xff1a;not connect to target! 13:33:39 : Can not connect to target! Please select "Connect Under Reset" mode from Target->Settings menu and try again. If youre trying to connect to a low frequ…

【Java集合类面试二十七】、谈谈CopyOnWriteArrayList的原理

文章底部有个人公众号&#xff1a;热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享&#xff1f; 踩过的坑没必要让别人在再踩&#xff0c;自己复盘也能加深记忆。利己利人、所谓双赢。 面试官&#xff1a;谈谈CopyOnWriteArrayLi…

FlutterUnit 周边 | 收录排序算法可视化

theme: cyanosis 1. FlutterUnit 更新&#xff1a;排序算法可视化 排序算法可视化是用视图层表现出算法执行过程中排序的过程&#xff0c;感谢 编程的平行世界 在 《十几种排序算法的可视化效果&#xff0c;快来看看&#xff01;&#x1f440;》》 一文中提供的算法支持。我进行…

【Proteus仿真】【Arduino单片机】继电器和按键

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真Arduino单片机控制器&#xff0c;使用蜂鸣器、按键、继电器、电机等。 主要功能&#xff1a; 系统运行后&#xff0c;K1键控制蜂鸣器发声&#xff0c;K2键控制LED开关&#xff0c;…

计算机图形学——二维变换

二维变换 概念 应用于对象几何描述并改变其位置、方向或者大小的变换叫做几何变换&#xff0c;有时候也被叫做建模变换。而本文仅讨论平面中的几何变换&#xff0c;即二维变换。 矩阵表示和齐次坐标 对于普通的2x2矩阵&#xff0c;我们总是要将平移项与其它变换对应的矩阵写…

MYSQL表的连接方式

mysql表连接方式可以分为 1、内连接 2、外连接 3、全连接 4、交叉连接 t1表 t2表 1、内连接&#xff0c;包括自然连接&#xff0c;等值连接&#xff0c;不等值连接 1.1、自然连接&#xff0c;根据相同字段进行连接匹配…

容联七陌百度营销通BCP解决方案,让营销更精准

百度营销通作为一个快速迭代、满足客户多元化营销需求的高效率营销工具成为众多企业的选择&#xff0c;通过百度营销通BCP对接&#xff0c;企业就可以在百度咨询页接入会话&#xff0c;收集百度来源的访客搜索关键词&#xff0c;通过百度推广获取更多的精准客户&#xff0c;从而…

基于JAVA的天猫商场系统设计与实现,springboot+jsp,MySQL数据库,前台用户+后台管理,完美运行,有一万五千字论文

目录 演示视频 基本介绍 论文目录 系统截图 演示视频 基本介绍 基于JAVA的天猫商场系统设计与实现&#xff0c;springbootjsp&#xff0c;MySQL数据库&#xff0c;前台用户后台管理&#xff0c;完美运行&#xff0c;有一万五千字论文。 本系统在HTML和CSS的基础上&#xf…

计算机起源(二)

一、前言 冯诺依曼奠定了计算机体系结构后&#xff0c;早期的计算机是没有操作系统的&#xff0c;还是需要大量的人为参与&#xff0c;比如纸卡打孔。通过纸卡上的方格&#xff0c;打孔来表示二进制数。那么如果能使计算机自动能够进行计算&#xff0c;就需要一个模拟人工的操…

Node学习笔记之使用Express框架开发接口

我们利用nodeexpressmysql开发接口&#xff0c;对数据库数据进行简单增、删、查改等操作。 工具 数据库可视化 接口测试工具Postman 1、初始化 我们这里利用nodeexpressmysql开发一个简单的书城商店API。后面会使用result API规范接口 1、创建项目 新建文件夹server 安装依…

记:2023香山杯-Ez加密器-题目复现和学习记录““

文章目录 前言题目分析and调试过程完整exp 前言 前段时间的比赛&#xff0c;那会刚入门o(╥﹏╥)o都不会写&#xff0c;现在复现一下。 题目分析and调试过程 查壳nie 进入IDA&#xff0c;shiftF12查找下字符串看看&#xff0c;定位过去 先用N重命名一下函数&#xff0c;方便…

GPDB7-新特性-角色创建

GPDB7-新特性-角色创建 9月GPDB7发布了release版本&#xff0c;新增了很多新特性及性能改进&#xff0c;对GPDB用户带来福音。业务在调研GPDB6升级到GPDB7的过程中&#xff0c;生产环境会创建用户&#xff0c;利用这些用户进行迁移。但是出现问题了&#xff0c;竟然会报&#x…

如何使用Linux编写STM32程序并且烧录

前言 &#xff08;1&#xff09;如果有嵌入式企业需要招聘湖南区域日常实习生&#xff0c;任何区域的暑假Linux驱动实习岗位&#xff0c;可C站直接私聊&#xff0c;或者邮件&#xff1a;zhangyixu02gmail.com&#xff0c;此消息至2025年1月1日前均有效 &#xff08;2&#xff0…

Z41H-64C高压闸阀型号解析

Z41H-64C型号字母含义 Z41H-64C型号是德特森阀门常用的高压闸阀型号字母分别代表的意思是: Z——代表阀门类别《闸阀》 4——代表连接方式《法兰》 1——代表结构形式《明杆》 H——代表密封堆焊《硬质合金》 -《分隔键》 64——代表公称压力《6.4MPA》 C——代表阀体材…