前言
(说起来,想要发表Java Web相关文章的时候,总是犹豫,我到底该将这些文章分类到什么标签下呢。毕竟感觉Java Web的知识也是与Java相关联的,烦恼呀,烦恼!)
回到正题,最近正好开始接触Java Web的开发学习。在完成老师课题的时候就遇到了我这个新手闻所未闻的名词 DataSource。
接下来我将简单介绍我在摸索 DataSource 时,我对 DataSource 的理解。
内容不多,虽然繁琐,但请耐心看完。
简介
DataSource中文名——数据源,是JNDI资源的一种。
简单的理解,数据源是一种数据库对编程提供的一个接口,每个数据源对应一个数据库,也就是记录是连接哪个数据库,如何连接这个数据库。
数据源包含 连接池和连接池管理两部分,习惯上也常把 DataSource 称为连接池。
连接池是什么
连接池可以比喻为一个池子,池子中存放着数据库连接对象(Connection),当用户需要访问数据库不再需要建立一个新的连接,只需从池中获取一个空闲的已建立连接的连接对象,当连接断开后,连接对象又会回到池子中。
连接池负责分配,管理,释放数据库连接对象。
注意的是: 连接池是由 容器(如Tomcat)提供,同时容器也管理连接池。
JNDI 是什么
JNDI(Java Naming and Directory Interface),Java命名和目录接口,它对应于J2SE中 javax.naming包,
这套API的主要作用在于:它可以把Java对象放在一个容器中(JNDI容器),并为容器中的Java对象取一个名称,以后程序想获得Java对象,只需通过名称检索即可。其核心API为Context,它代表JNDI容器,其lookup方法为检索容器中对应名称的对象。
常用的 JDBC 连接方法
往往我们在web开发使用数据库的时候,就与 DataSource 有所关联了。
(这里都将以 Mysql数据库 为例子展开讨论)
我们常用的连接数据的方法,代码如下:
1 | String driverUrl = "com.mysql.cj.jdbc.Driver"; |
这时由 sun公司 开始封装好的方法,也是我们初学者常用到的。但是往往我们初学者常常容易在这里栽跟头,什么连接错误,找不到包之类的奇怪问题,一堆又一堆呀。
而对于
DataSource可以不编写连接数据库的方法,直接引用DataSource连接的数据库的对象即可,主要用于获取Connection的对象。
DataSource 的优势
传统方法,我们需要频繁 连接数据库 以及 断开数据库,这个过程也是是否消耗资源。
而 DataSource 建立多个数据库连接,这些数据连接会放 入数据库连接池 中,需要使用数据库时,只需要从 数据库连接池 中获取空闲的 数据库连接对象,当数据库访问完后,又会放入 数据库连接池中。
因而使用 DataSource 在性能方面有了很多的提高。
还有利用 数据源 可以对数据库连接进行是否详细的配置,这十分有益于分布式。
很抱歉的是,更详细的我也不清楚,就由时间来逼迫我去学习吧。。
实现
首先由sun公司提供的 javax.sql.DataSource 包,对于 DataSource 接口不推荐去自行实现,数据库驱动厂商会提供相关的 DataSource 可使用。
例如 MySql 提供的 MysqlDataSource。
一般 DataSource 实现有三中:
- 类似 DriverManager 同样的操作。
- 结合连接池的使用,这也是最推荐的(可惜我目前不会)
- 分布式事务的实现。(我也不会。。)
简单的实现:
1 | DataSource dataSource; |
配合连接池实现
连接池会将空闲的数据库连接对象存储起来,当有需要数据库访问的请求时,可以分配空闲对象,从而更快的连接数据库,而数据库断开连接后,又会放入连接池中。
Java中主流的数据库连接池有 C3P0 和 DBCP。
实现实例。。。。请等待更新
使用 JNDI实现访问Tomcat内置连接池
Tomcat 也有提供连接池,具体实现戳戳这里,Tomcat 配置 DataSources
结语
我也是个菜鸟,也是刚接触到 DataSource 就试着去探索了一番,但涉及到太多我没有接触到的知识,通过我的摸索简单总结了这些,希望能对看到这篇文章的人有所(些许)帮助。
还是没想清楚 到底该讲文章归为哪一类标签。。。好烦恼呀。
参考文献
感谢这些文献,非常感谢。
[1]: DataSource数据源简单理解 — 布玮博客 — https://blog.csdn.net/qq_40910541/article/details/80771607
[2]:DataSource 的理解 — predisw 博客—https://blog.csdn.net/predisw/article/details/50151849
[3]:JDBC 学习复习9 配置Tomcat数据源 —言非言 博客—https://www.cnblogs.com/humi/p/7958738.html
[4]:【Java】JAVA数据源 — 薛8 博客 —https://blog.csdn.net/xueba8/article/details/84107204