前言

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

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. D3、openlayers的一次尝试

    近期尝试了一个webgl相关的内容,有些小激动,及时分享一下我的测试示例,效果如下: 此示例分从业务角度分为两部分,一个部分为d3展示的柱图,另一部分则为用openlayers展示的地图.而其难点却在 ...

  2. mockjs,json-server一起搭建前端通用的数据模拟框架

    无论是在工作,还是在业余时间做前端开发的时候,难免出现后端团队还没完成接口的开发,而前端团队却需要实现对应的功能,不要问为什么,这是肯定存在的.本篇文章就是基于此原因而产出的.希望对有这方面的需求的同 ...

  3. 『Kruscal重构树 Exkruscal』

    新增一道例题及讲解 Exkruscal \(Exkruscal\)又称\(Kruscal\)重构树,是一种利用经典算法\(Kruscal\)来实现的构造算法,可以将一张无向图重构为一棵具有\(2n-1 ...

  4. Spring Boot 集成 Hystrix

    续: <Hystrix介绍> <Hystrix是如何工作的> <SpringCloud学习笔记(3)——Hystrix> Hystrix使用 package com ...

  5. asp.net core 系列 12 选项 TOptions

    一.概述 本章讲的选项模式是对Configuration配置的功能扩展. 讲这篇时有个专用名词叫“选项类(TOptions)” .该选项类作用是指:把选项类中的属性与配置来源中的键关联起来.举个例,假 ...

  6. 那些令人惊艳的TensorFlow扩展包和社区贡献模型

    随着TensorFlow发布的,还有一个models库(仓库地址:https://github.com/tensorflow/models),里面包含官方及社群所发布的一些基于TensorFlow实现 ...

  7. 从锅炉工到AI专家(7)

    说说计划 不知不觉写到了第七篇,理一下思路: 学会基本的概念,了解什么是什么不是,当前的位置在哪,要去哪.这是第一篇希望做到的.同时第一篇和第二篇的开始部分,非常谨慎的考虑了非IT专业的读者.希望借此 ...

  8. JAVA实现在线查看PDF和office文档

    一个项目中要做一个在线预览附件(和百度文库差不多)的小功能点,楼主在开发过程中踩了很多坑的同时也总结了一些方法,仅供广大猿友参考,那么要实现这个小功能,目前主要是有如下3种可行的实现方式,下面先说实现 ...

  9. 撸一撸Spring Cloud Ribbon的原理-负载均衡策略

    在前两篇<撸一撸Spring Cloud Ribbon的原理>,<撸一撸Spring Cloud Ribbon的原理-负载均衡器>中,整理了Ribbon如何通过负载均衡拦截器植 ...

  10. Linux常用监控命令简介 – vmstat,ps,free,uptime 等

    vmstat [-a] [-n] [delay [ count]]vmstat [-f] [-s] [-m]vmstat [-S unit]vmstat [-d]vmstat [-p disk par ...