第一次Java程序要在MySQL中执行一条语句,那么就必须建立一个Connection对象,代表了与MySQL数据库的连接通过直接发送你要执行的SQL语句之后,就会调用Connection.close()来关闭和销毁与数据库的连接。为什么要立即关闭呢?因为数据库的连接是一种很重的资源,代表了网络连接、IO等资源。所以如果不是用的话就需要尽早关闭,以避免资源浪费。

JDBC的劣势与不足:如果要频繁地操作MySQL的话,那么就势必会频繁地创建Connection对象,底层建立起连接与MySQL的占用了网络资源、IO资源的连接。每次使用完Connection对象之后,都必须将Connection连接关闭,又涉及到频繁的网络资源、IO资源的关闭和释放。

如上所述,如果频繁的开关Connection连接,那么会造成大量的对网络、IO资源的申请和释放的无谓的时间耗费,对于特别频繁的数据库操作,比如100次/s,那么就可能会导致性能急剧下降。

数据库连接池,会自己在内部持有一定数量的数据库连接,比如通常可能是100~1000个左右,然后每次Java程序要通过数据库连接往MySQL发送语句的时候,都会从数据库连接池中获取一个连接,然后通过它发送SQL语句。SQL语句执行完之后,不会调用Connection.close(),而是将连接还回数据库连接池里面。下一次,Java程序再需要操作数据库的时间,就还是重复以上步骤,获取连接,发送SQ,还回连接。

数据库连接池的好处:

1.Java程序不用自己去管理Connection的创建和销毁,代码上更加方便。

2.程序中只有固定数量的数据库连接,不会一下子变得很多,而且也不会进行销毁。那么对于段时间频繁进行数据库操作的业务来说。就有很大的意义和很高的价值。也就是说,如果短时间内,频繁操作10000次,不需要对数据连接创建和销毁10000次。这样的话,可以大幅度节省我们的数据可连接的创建和销毁的资源开销以及时间开销。

3.最终可以提升整个应用程序的性能。

在Spark的作业中,通常来说,都需要使用数据库连接池。当然,也可以使用开源的数据库连接池,功能非常强大,比如说C3P0、DBCP等等。但是呢,对于某些简单的情况下,我们也可以自己编写一个简单的数据库连接池即可。

而且在spark作业中,是非常适合使用数据库连接池的。为什么?因为spark计算出来的结果,可能数据量还是比较大的。比如说

java 数据库连接原理_JAVA- 数据库连接池原理相关推荐

  1. java线程池的工作原理_JAVA线程池原理详解一

    线程池的优点 1.线程是稀缺资源,使用线程池可以减少创建和销毁线程的次数,每个工作线程都可以重复使用. 2.可以根据系统的承受能力,调整线程池中工作线程的数量,防止因为消耗过多内存导致服务器崩溃. 线 ...

  2. java 线程池的理解_JAVA线程池原理的理解

    线程池原理基础理解: 线程池初始化规定个数的线程,然后这些线程一直运行,并且监控线程队列,只要线程队列被添加进线程,那么线程池不断从队列中取出线程运行.直到队列中的线程为空.实例代码如下: packa ...

  3. java架构学习——5. 线程池原理剖析锁的深度化

    本篇博文主要包含: 线程池的基本概念 ThreadPoolExecutor 线程池四种创建方式 -newCachedThreadPool:可缓存线程池 -newFixedThreadPool:定长线程 ...

  4. java线程池的工作原理_Java 线程池的介绍以及工作原理

    在什么情况下使用线程池? 1.单个任务处理的时间比较短 2.将需处理的任务的数量大 使用线程池的好处: 1. 降低资源消耗: 通过重复利用已创建的线程降低线程创建和销毁造成的消耗. 2. 提高响应速度 ...

  5. java set和get原理_Java线程池的实现原理和使用

    为什么用线程池 在我们进行开发的时候,为了充分利用系统资源,我们通常会进行多线程开发,实现起来非常简单,需要使用线程的时候就去创建一个线程(继承Thread类.实现Runnable接口.使用Calla ...

  6. future java 原理_Java线程池FutureTask实现原理详解

    前言 线程池可以并发执行多个任务,有些时候,我们可能想要跟踪任务的执行结果,甚至在一定时间内,如果任务没有执行完成,我们可能还想要取消任务的执行,为了支持这一特性,ThreadPoolExecutor ...

  7. java 数据库连接 释放_java - 数据库连接池耗尽 - Java - 堆栈内存溢出

    timeout变量似乎不对应于连接空闲的时间,而是对应于池等待返回新连接或抛出异常的时间(我看了一下这个源代码 ,不知道是不是已是最新). 我认为跟踪"空闲"连接是相当困难的,因为 ...

  8. JAVA阻塞队列和线程池原理

    阻塞队列 队列 队列是一种特殊的线性表,遵循先入先出.后入后出的基本原则,一般来说,它只允许在表的前端进行删除操作,而在表的后端进行插入操作. 什么是阻塞队列 支持阻塞的插入方法,当队列满时,队列会阻 ...

  9. java synchronized 原理_Java Synchronized的原理

    我们先通过反编译下面的代码来看看Synchronized是如何实现对代码块进行同步的: public classSynchronizedDemo{public voidmethod(){synchro ...

  10. java能够运行的原理_JAVA程序运行原理分析(一)

    作为JAVA的开发人员,需要知道JAVA是如何运行的,这个需要好好思考下. (一)class文件内容 class文件包含JAVA程序执行的字节码,也就是说程序的执行是通过class里面的内容进行执行的 ...

最新文章

  1. JAVA_OA管理系统(四)番外篇:使用Spring注解注入属性
  2. 利用WebService实现远程服务器文件的上传和下载
  3. QT显示框架嵌入Vs控制台工程
  4. 【渝粤教育】电大中专财务管理与分析 (2)作业 题库
  5. 二十一、补码 (计算机最小的单位为位)
  6. 特斯拉宣布总部将从加州硅谷迁到得州
  7. 3d人脸识别算法opencv_用Opencv打造自己的人脸识别
  8. 《跟小海龟学Python》部分案例视频集锦
  9. 公共 API 的错误次数远超你想象!
  10. 每天一道算法题(13)——使用递归颠倒栈
  11. Ubutnu中ln创建软连接失败
  12. MSP430学习小结2-程序主体结构安排及低功耗-转载
  13. 安装“万能解码器”还原真实“解码”
  14. 游程编码用matlab实现代码_matlab游程编码
  15. Windows10 地平线4支持PS4手柄有线连接
  16. office插件开发_linux常用软件(开发设计必备)
  17. 推荐10个国外图片素材网站
  18. 如何获得一个RAC Oracle数据库(从Github - oracle/docker-images) - 本地版
  19. 【VMware】VMware Workstation 未能启动 VMware Authorization Service
  20. 接口自动化测试框架介绍

热门文章

  1. jsp和severlet的区别
  2. 2017GDCPC题解(未完)
  3. linux挂载安卓手机命令,难得好文Linux mount 命令详解
  4. 白领办公操小锻炼收获大健康
  5. 芋道源码的周八(2018.03.04)
  6. 6、获取最低价手机价格
  7. idea使用正则匹配汉字
  8. 面对新技术,这才是软件工程师的正确打开方式
  9. ant Design Select 默认选中
  10. vivoX60pro和vivox50pro的区别 vivoX60pro和vivox50pro参数对比 哪个更值得入手