我先说说数据库连接

数据库大家都不陌生,从名字就能看出来它是「存放数据的仓库」,那我们怎么去「仓库」取东西呢?当然需要钥匙啦!这就是我们的数据库用户名、密码了,然后我们就可以打开门去任意的存取东西了。这个时候,我们与数据库之间的连接就是「数据库连接」。

这个时候问题就来了,当我们仅仅只需要去取一个东西的时候,我们取完东西随手关上门,然后拔出钥匙,这完全是再正常不过的流程了,完全没毛病,但是,我们大部分时间是需要一件件的把仓库中的东西搬到外面停放的大卡车上,那这时候我们如果取一件东西把门锁上,然后再打开门取一件再次锁上,这有没有毛病?在我看来,这个逻辑完全正确,没一点毛病,就是这样必然会影响我们装货的效率嘛!正常人肯定会想到我们不锁门不就行了,等这批货装完了,我们再锁上门。这可以阿,但是,会不会有安全及其他问题?还有这时候你是否允许别人从你打开的门进入仓库搬东西?

如果,这时候我们招聘了一个「仓库管理员」帮忙我们管理会怎样?当然完美啦,他会在你进入仓库时给你「授权令」进入,然后可能还会在你出来的时候检查下你搬的货物是否正确,并做下记录以及报表分析,然后你完成时把你的「授权令」还给他,另外一个人进入当然也是这样的,也并不会影响到你的工作,你俩当然可以同时搬东西,仓库管理员并不会在你结束的时候锁上门。

何为数据库连接池

其实上面的「仓库管理员」我就认为是我们程序世界的数据库连接池。因为他手里拿着大把的进入仓库的令牌,他给你一个你就能进去,出来后你还给他,他再接着可以给下一个人,这个时候我们仓库门是一直打开的状态,省去了大把我们开锁、开门、关门、锁门的操作,完全交由一个专业人士管理,更神奇的是他还能记录你的一系列操作。

看概念:

数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。

摘自百度百科

在大部分 .Net 开发人心目中,好像并没有数据库连接池的概念,只有数据库连接,然后用完要记得close和用using,在 Java 中有太多的开源的数据库连接池,而且好像一个吹的比一个厉害。我其实告诉你,其实在 .Net 中 ADO.Net 已经帮我们实现了数据库连接池,我们并不需要什么配置,用就是了,但 Java 不一样,需要我们自己选择合适的数据库连接池。下面我说说项目中为什么选择了阿里的 Druid 数据库连接池。

为监控而生的数据库连接池

这是它在 GitHub 上的描述,它有四千多的 Star , 这些并不重要,其实他的监控功能做的很不错,对开发完成后我们代码优化提供了大量的参考,至少在数据库连接层面的提升是明显可见的。我们曾经把一个耗时半分钟的查询优化到毫秒级别,当然这并不是全靠优化数据库查询,但它对调优有重要帮助。

网上有很多各个比较常用的连接池的对比,如 c3p0 ,Proxool ,Druid ,Tomcat Jdbc Pool 等等这些,你可以搜到详细的对比,我这里不再讨论,我提供一个 连接池c3p0 ,Proxool ,Druid ,Tomcat Jdbc Pool对比测试,可以参考。下面是官方的功能对比:

配置起来也很简单

二、applicationContext.xml文件配置数据库连接

这好像和其他数据库连接池没多少区别,除了几个参数不同而已,我贴出我的配置

init-method="init" destroy-method="close">

com.mysql.jdbc.Driver

jdbc:mysql://127.0.0.1:3306/springdemo?useUnicode=true&characterEncoding=UTF-8

root

123456

上面的参数都可以根据自己的需要来调整。具体配置请访问我的 GitHub 示例https://github.com/mafly/SpringDemo/blob/master/WebContent/WEB-INF/applicationContext.xml

三、web.xml文件配置监控平台

DruidWebStatFilter

com.alibaba.druid.support.http.WebStatFilter

exclusions

*.js,*mp3,*.swf,*.xls,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*

DruidWebStatFilter

/*

DruidStatView

com.alibaba.druid.support.http.StatViewServlet

resetEnable

true

loginUsername

admin

loginPassword

123456

DruidStatView

/druid/*

在文件中加入上面配置,就可以在项目地址后加druid后访问监控平台,看一下数据库连接及 SQL 语句执行时间,当然登录密码什么的自己配置啦。登录后界面:

总结一下

我这里当然就是抛砖引玉的简单说了一下 Druid 数据库连接池的基本配置,更多强大功能等待大家去体验,在我们时间项目中,使用起来会比原来 c3p0 要爽,这里要感谢项目组中小慷同学的技术分享, Druid 的具体情况及各种配置大家都可以去 https://github.com/alibaba/druid/ 查看,文档还是比较详细的。

当然,我上面的配置大家也都可以访问我 GitHub(改版了,你去看看)上的 Spring 示例项目查看:https://github.com/mafly/SpringDemo/。

java 连接池 druid_从零开始学 Java - 数据库连接池的选择 Druid相关推荐

  1. 零基础学java web开发 pdf_从零开始学Java Web开发 PDF 扫描版[69M]

    java web是目前最流行的动态网页开发技术之一.本书由浅入深.循序渐进,使零基础的读者能够熟练掌握如何使用java web开发应用程序系统. 本书分为4部分,第一部分是java语言基础篇,包括ja ...

  2. JAVE EE 企业级开发之从零开始学JAVA【51CTO技术论坛】

    http://bbs.51cto.com JAVE EE 企业级开发之从零开始学JAVA         从零开始学JAVA?YES!本刊内容全部为午饭redking整理.撰写,所涉及内容均为原创,非 ...

  3. 从零开始学 Java - Spring 集成 Memcached 缓存配置(二)

    Memcached 客户端选择 上一篇文章 从零开始学 Java - Spring 集成 Memcached 缓存配置(一)中我们讲到这篇要谈客户端的选择,在 Java 中一般常用的有三个: Memc ...

  4. 从零开始学 Java - Spring MVC 实现跨域资源 CORS 请求

    论职业的重要性 问:为什么所有家长都希望自己的孩子成为公务员? 答:体面.有权.有钱又悠闲. 问:为什么所有家长都希望自己的孩子成为律师或医生? 答:体面.有钱.有技能. 问:为什么所有家长都不怎么知 ...

  5. windows java eclipse_从零开始学 Java - Windows 下安装 Eclipse

    三观是什么鬼 当我们在讨论「三观一致」的时候是在讨论些什么? 我认为这个世界上本没有「三观」这一说法,说的人多了,也就有了「三观」这个词,当我们讨论「三观一致」其实并不是真的在说世界观.价值观.人生观 ...

  6. 从零开始学java(二十六)--多维数组,多维数组存储表格数据

    从零开始学java(二十六)--多维数组 多维数组 多维数组存储表格数据 多维数组 多维数组可以看成以数组为元素的数组.可以有二维.三维.甚至更多维数组,但是实际开发中用的非常少.最多到二维数组(学习 ...

  7. 44从零开始学Java之详解容易让初学者懵圈的abstract抽象类、抽象方法

    作者:孙玉昌,昵称[一一哥],另外[壹壹哥]也是我哦 千锋教育高级教研员.CSDN博客专家.万粉博主.阿里云专家博主.掘金优质作者 前言 经过前面几篇文章的讲解,我们现在已经对面向对象有了基本的认知, ...

  8. 从零开始学JAVA:二、Java基本语法(四)——流程控制

    从零开始学JAVA:二.Java基本语法(四)--流程控制 程序流程控制 1.顺序结构 2.分支结构 2.1.if-else结构 2.2.switch-case选择结构 2.3.Scanner类的使用 ...

  9. java任务调度定时器,从零开始学 Java - Spring 使用 Quartz 任务调度定时器

    生活的味道 睁开眼看一看窗外的阳光,伸一个懒腰,拿起放在床一旁的水白开水,甜甜的味道,晃着尾巴东张西望的猫猫,在窗台上舞蹈.你向生活微笑,生活也向你微笑. 请你不要询问我的未来,这有些可笑.你问我你是 ...

最新文章

  1. 【转】linux服务器性能查看
  2. HDU4009(最小树形图)
  3. Linux rm过滤后的目录6,Linux的部分命令
  4. 320. Generalized Abbreviation-- back tracking and bit manipulation(待续)
  5. android 美颜资料整理
  6. linux 同步 多终端,Linux系统如何实现不同终端间的同步
  7. LTE小区选择和重选
  8. 创业融资十项注意要点
  9. PHP中的mb_convert_encoding与iconv函数介绍
  10. vue利用级联选择器实现全国省市区乡村五级菜单联动
  11. 龙芯linux内核,龙芯的linux kernel,内核开发与编译
  12. mongo基本使用方法
  13. 【codevs1026】逃跑的拉尔夫,广搜的胜利
  14. 个人所得税如何填写最划算?
  15. java面向对象程序设计编程题,已拿到offer
  16. excel如何从字符串中截取指定字符(LEFT、RIGHR、MID三大函数)
  17. SAP BAPI 教程 – 在 ABAP 中创建 BAPI 的分步指南-020
  18. css方块跳动且颜色变化,CSS3 波动的方块
  19. The Beer House 终于运行起来了
  20. 若依源码分析(14)——数据监控

热门文章

  1. SLAM工具|GDB调试从入门到精通
  2. 免费送书啦!《 OpenCV图像处理入门与实践》一本全搞定
  3. 基于点云的三维物体表示与生成模型
  4. 一些基于深度学习的视觉里程计/SLAM开源代码
  5. Homography matrix(单应性矩阵)在广告投放中的实践
  6. java 装配_java – 无法自动装配方法
  7. docker连接容器外部的mysql
  8. Bioinformatics | 预测药物-药物相互作用的多模态深度学习框架
  9. RDKit | 基于不同描述符和指纹的机器学习模型预测logP
  10. c语言二叉树链式存储,二叉树链式存储基本操作(C语言)