前言

我们重复造轮子,不是为了证明我们比那些造轮子的人牛逼,而是明白那些造轮子的人有多牛逼。

JDBC介绍

在JDBC中,我们可以通过DriverManager.getConnection()创建(而不是获取)一个Connection,在完成CRUD之后,再去销毁该Connection。在并发量不高的情况下,创建销毁Connection所花费的时间和资源是可以接受,但是随着并发量的提高,频繁的创建销毁Connection所付出的性能代价太大了,因此在创建一个Connection后能够可以多次使用成了一个很好的选择。在JDBC规范中,通过实现java.sql.Datasource接口,可以屏蔽数据库、操作系统的差异,实现Connection的复用。

常用开源数据源框架介绍

目前,我们常用的数据源框架主要有dbcp2、tomcat-jdbc,c3p0,druid、hikariCP:

  1. dbcp2: 由Apache开发的一款优秀数据源;
  2. tomcat-jdbc: tomcat自带的JDBC连接池,是dbcp2的一种替换或备选方案;
  3. c3p0: 一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展,
  4. druid: 阿里出品的一款数据源框架,号称Java语言中最好的数据库连接池,能够提供强大的监控和扩展。
  5. hikariCP: 号称史上最快的数据源,Spring Boot2.0默认的数据源

Apache Commons Pool2

Apache Commons Pool2是Apache出品的一套对象池的开源库,提供课一些Pool接口和辅助实现Pool接口的实现。

PooledObjectFactory

PooledObjectFactory提供一个管理对象的通用工厂:

public interface PooledObjectFactory<T> {
PooledObject<T> makeObject();
void activateObject(PooledObject<T> obj);
void passivateObject(PooledObject<T> obj);
boolean validateObject(PooledObject<T> obj);
void destroyObject(PooledObject<T> obj);
}

Apache Commons Pool2提供一个抽象的PooledObjectFactory实现: BasePooledObjectFactory,我们需要实现create和wrap这两个方法。

GenericObjectPool

GenericObjectPool 提供了一个简单的、可扩展的Pool实现

Guobin DataSource

Guobin是基于Apache Commons Pool2的一个数据源Demo,使用示例:

public class TestGuobinDataSource {

    private static final String DRIVER = "com.mysql.jdbc.Driver";
private static final String URL = "jdbc:mysql://127.0.0.1:3306/world?characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8";
private static final String USERNAME = "root";
private static final String PASSWORD = "267552"; private static DataSource ds; @BeforeClass
public static void initDataSource() {
ds = GuobinDataSourceBuilder.buildSimpleDataSource(DRIVER, URL, USERNAME, PASSWORD);
} @Test
public void testGetConnection() throws SQLException {
Assert.assertNotNull(ds.getConnection());
}
}

一个数据源demo的更多相关文章

  1. SpringBoot-------实现多数据源Demo

    之前SpringBoot出来时候就看了下Springboot,感觉的确精简掉了配置文件! 还是很方便的!没办法,我只是个菜鸟! 什么怎么启动Springboot什么的就不说了, 具体的Demo地址我都 ...

  2. LeadTools Android 入门教学——运行第一个Android Demo

    LeadTools 有很多Windows平台下的Demo,非常全面,但是目前开发手机应用的趋势也越来越明显,LeadTools也给大家提供了10个Android的Demo,这篇文章将会教你如何运行第一 ...

  3. ArcGIS API for JavaScript开发环境搭建及第一个实例demo

    原文:ArcGIS API for JavaScript开发环境搭建及第一个实例demo ESRI公司截止到目前已经发布了最新的ArcGIS Server for JavaScript API v3. ...

  4. 模仿京东顶部搜索条效果制作的一个小demo

    最近模仿京东顶部搜索条效果制作的一个小demo,特贴到这里,今后如果有用到可以参考一下,代码如下 #define kScreenWidth [UIScreen mainScreen].bounds.s ...

  5. java线程间通信:一个小Demo完全搞懂

    版权声明:本文出自汪磊的博客,转载请务必注明出处. Java线程系列文章只是自己知识的总结梳理,都是最基础的玩意,已经掌握熟练的可以绕过. 一.从一个小Demo说起 上篇我们聊到了Java多线程的同步 ...

  6. 快速搭建一个直播Demo

    缘由 最近帮朋友看一个直播网站的源码,发现这份直播源码借助 阿里云 .腾讯云这些大公司提供的SDK 可以非常方便的搭建一个直播网站.下面我们来给大家讲解下如何借助 腾讯云 我们搭建一个简易的 直播示例 ...

  7. Visual Studio 2017 - Windows应用程序打包成exe文件(2)- Advanced Installer 关于Newtonsoft.Json,LINQ to JSON的一个小demo mysql循环插入数据、生成随机数及CONCAT函数 .NET记录-获取外网IP以及判断该IP是属于网通还是电信 Guid的生成和数据修整(去除空格和小写字符)

    Visual Studio 2017 - Windows应用程序打包成exe文件(2)- Advanced Installer   Advanced Installer :Free for 30 da ...

  8. 这是关于FastJson的一个使用Demo,在Java环境下验证的

    public class User { private int id; private String name; public int getId() { return id; } public vo ...

  9. Go学习【02】:理解Gin,搭一个web demo

    Go Gin 框架 说Gin是一个框架,不如说Gin是一个类库或者工具库,其包含了可以组成框架的组件.这样会更好理解一点. 举个 下面的示例代码在这:github 利用Gin组成最基本的框架.说到框架 ...

随机推荐

  1. MVC中Model元数据及绑定机制

    ASP.NET MVC的Model为View Model,表示最终呈现在View上的数据,而Model元数据的一个重要的作用在于控制对象在View上的呈现方式.说得更加具体点,就是基于某种数据类型的M ...

  2. python入门学习记录(win7+python3.6)

    1. pip freeze 可以查看安装的模块信息 2. 查看某个模块是否已经安装了 conda(pip) search <moduleName>.图一显示为未安装,图二显示为已经安装

  3. CSRF 漏洞测试

    CSRF简介: CSRF中文名:跨站请求伪造,英文译为:Cross-site request forgery,CSRF攻击就是attacker(攻击者)利用victim(受害者)尚未失效的身份认证信息 ...

  4. [九]基础数据类型之Boolean详解

      相对于其他的基础性 类型Boolean是很简单的 Boolean 基本数据类型boolean  的包装类 Boolean 类型的对象包含一个 boolean 类型的字段    属性简介 属性也比较 ...

  5. 【Vue.js】vue基础: 3种Class和Style绑定语法

    凡是用到了v-bind,那就一定有变量的存在,下面是三种语法的展示: 1. 对象语法: v-bind:class="{active: isActive, 'text-danger': has ...

  6. ajax跨域请求,亲测有效

    跨域请求域有两种常用解决方案,jsonp和cors, 因为jsonp只能解决get请求问题,我这里用的是cors方法. js前端ajax请求: $.ajax({ url: "http://1 ...

  7. SQL Server分页存储过程通用存储过程

    CREATE proc [dbo].[p_paging]@tableName varchar(8000),          --表名.视图名@indexCol varchar(50) = 'id', ...

  8. 【代码笔记】Web-CSS-CSS Padding(填充)

    一,效果图. 二,代码. <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...

  9. input中只能写入数字int、float

    input 属性 type="number" <input type="number" min="1" max="100&q ...

  10. 轨迹系列6——车载GPS对接方案汇总小结(809、自定义协议、前置库、WS)

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 最近在不同项目中对接了多个车载GPS厂商服务终端,绝大多数厂商 ...