初探Druid
说到连接池,最常见的就是dbcp和c3p0,关于druid,官方定义是为监控而生的数据库连接池。
官方中文文档地址:https://github.com/alibaba/druid/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98
下面我介绍如何在servlet即不使用任何框架的时刻下使用druid并显示监控页面。
连接池之间的性能测试

1、首先导入下面这2个jar包
链接:https://pan.baidu.com/s/1e9lLS3e0xFdUFsPTu9rSQA 密码:xj6v

2、在web.xml文件中加入如下配置:
<filter>
<filter-name>druidWebStatFilter</filter-name>
<filter-class>com.alibaba.druid.support.http.WebStatFilter</filter-class>
<init-param>
<param-name>exclusions</param-name>
<param-value>/public/*,*.js,*.css,/druid*,*.jsp,*.swf</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>druidWebStatFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>DruidStatView</servlet-name>
<servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
<init-param>
<param-name>allow</param-name>
<param-value>127.0.0.1</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>DruidStatView</servlet-name>
<url-pattern>/druid/*</url-pattern>
</servlet-mapping>
3、在src下建一个db_server.properties的配置文件

内容如下,可根据自身需求调整
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql:///kaoqin?useSSL=true
username=root
password=root
filters=stat
initialSize=2
maxActive=300
maxWait=60000
timeBetweenEvictionRunsMillis=60000
minEvictableIdleTimeMillis=300000
validationQuery=SELECT 1
testWhileIdle=true
testOnBorrow=false
testOnReturn=false
poolPreparedStatements=false
maxPoolPreparedStatementPerConnectionSize=200
4、创建一个DruidConnection类
public class DruidConnection {
    private static Properties properties = null;
    private static DataSource dataSource = null;
    private volatile static DruidConnection instatce = null;
    private Connection connection = null;
    //私有构造函数,防止实例化对象
    private DruidConnection() {
    }
    static {
        try {
            properties = new Properties();
            // 1.加载properties文件
            InputStream is = DruidConnection.class.getClassLoader().getResourceAsStream("db_server.properties");
            // 2.加载输入流
            properties.load(is);
            // 3.获取数据源
            dataSource = getDatasource();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    /**
     * 用简单单例模式确保只返回一个链接对象
     *
     * @return
     */
    public static  DruidConnection getInstace() {
        if(instatce == null) {
            synchronized (DruidConnection.class) {
                if(instatce == null) {
                    instatce = new DruidConnection();
                }
            }
        }
        return instatce;
    }
    // 返回一个数据源
    public DataSource getDataSource() {
        return dataSource;
    }
    // 返回一个链接
    public Connection getConnection() {
        try {
            connection = dataSource.getConnection();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return connection;
    }
    // 加载数据源
    private static DataSource getDatasource() {
        DataSource source = null;
        try {
            source = DruidDataSourceFactory.createDataSource(properties);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return source;
    }
}
5、创建工具类DruidUtils
public class DruidUtils {
    private static Connection connection = null;
    //获取元数据
    public static DataSource getDatasource() {
        DataSource dataSource = DruidConnection.getInstace().getDataSource();
        return dataSource;
    }
    //获取链接
    public static Connection getConnection() {
         connection = DruidConnection.getInstace().getConnection();
        return connection;
    }
    //归还资源
    public void release() {
        try {
            if(connection != null) {
                connection.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}
6、在DAO层应用(举例)
public class UserDao {
    public User login(String name,String password) throws SQLException {
        // TODO Auto-generated method stub
        QueryRunner runner = new QueryRunner(DruidUtils.getDatasource());
        String sql = "select * from user where name=? and password=?";
        User user = runner.query(sql, new BeanHandler<User>(User.class), name, password);
        return user;
    }
}
7、浏览地址:${pageContext.request.contextPath}/druid/index.html
效果图:
初探Druid的更多相关文章
- Druid连接池初探
		
Druid首先是一个数据库连接池,但它不仅仅是一个数据库连接池,它还包含一个ProxyDriver,一系列内置的JDBC组件库,一个SQL Parser. Maven配置 在pom.xml文件中添加如 ...
 - 初探领域驱动设计(2)Repository在DDD中的应用
		
概述 上一篇我们算是粗略的介绍了一下DDD,我们提到了实体.值类型和领域服务,也稍微讲到了DDD中的分层结构.但这只能算是一个很简单的介绍,并且我们在上篇的末尾还留下了一些问题,其中大家讨论比较多的, ...
 - CSharpGL(8)使用3D纹理渲染体数据 (Volume Rendering) 初探
		
CSharpGL(8)使用3D纹理渲染体数据 (Volume Rendering) 初探 2016-08-13 由于CSharpGL一直在更新,现在这个教程已经不适用最新的代码了.CSharpGL源码 ...
 - 从273二手车的M站点初探js模块化编程
		
前言 这几天在看273M站点时被他们的页面交互方式所吸引,他们的首页是采用三次加载+分页的方式.也就说分为大分页和小分页两种交互.大分页就是通过分页按钮来操作,小分页是通过下拉(向下滑动)时异步加载数 ...
 - JavaScript学习(一) ——  环境搭建与JavaScript初探
		
1.开发环境搭建 本系列教程的开发工具,我们采用HBuilder. 可以去网上下载最新的版本,然后解压一下就能直接用了.学习JavaScript,环境搭建是非常简单的,或者说,只要你有一个浏览器,一个 ...
 - .NET文件并发与RabbitMQ(初探RabbitMQ)
		
本文版权归博客园和作者吴双本人共同所有.欢迎转载,转载和爬虫请注明原文地址:http://www.cnblogs.com/tdws/p/5860668.html 想必MQ这两个字母对于各位前辈们和老司 ...
 - React Native初探
		
前言 很久之前就想研究React Native了,但是一直没有落地的机会,我一直认为一个技术要有落地的场景才有研究的意义,刚好最近迎来了新的APP,在可控的范围内,我们可以在上面做任何想做的事情. P ...
 - Spring + SpringMVC + Druid + MyBatis 给你一个灵活的后端解决方案
		
生命不息,折腾不止. 折腾能遇到很多坑,填坑我理解为成长. 两个月前自己倒腾了一套用开源框架构建的 JavaWeb 后端解决方案. Spring + SpringMVC + Druid + JPA(H ...
 - Spring + SpringMVC + Druid + JPA(Hibernate impl) 给你一个稳妥的后端解决方案
		
最近手头的工作不太繁重,自己试着倒腾了一套用开源框架组建的 JavaWeb 后端解决方案. 感觉还不错的样子,但实践和项目实战还是有很大的落差,这里只做抛砖引玉之用. 项目 git 地址:https: ...
 
随机推荐
- MYSQL常用命令(转)
			
1.导出整个数据库mysqldump -u 用户名 -p --default-character-set=latin1 数据库名 > 导出的文件名(数据库默认编码是latin1)mysqldum ...
 - neo4j 实战、实例、示例 创建电影关系图 -1
			
1. 创建关系 因为代码占篇幅太大,创建整个"电源关系图"的代码在文章最下方. 2. 简单分析创建语句 2.1 创建电影节点 CREATE (TheMatrix:Movie {ti ...
 - docker中使用源码方式搭建SRS流媒体服务
			
一.背景 搭建流媒体服务的方式一般会采用nginx+rtmp和srs服务两种,前者是nginx加上插件所用,而后者是专门为了为了流媒体而生,在这一节中我们将从头搭建srs流媒体服务 二. 运行环境 为 ...
 - Hibernate调用Oracle的存储过程
			
众所周知,当过多的使用存储过程,触发器等 数据库方言相关的应用时,应用程序的移植性会变差,特别是在Hibernate中使用这些,简直是讽刺,但是当今中国又有哪家公司做项目会关心应用程序的移植性呢? 现 ...
 - C语言开发系列-二进制
			
n位二进制的取值范围 -2的n-1次方 ~ 2的n-1次方-1 输出一个整数的二进制的存储形式 #include <stdio.h> // 输出一个整数的二进制的存储形式 void put ...
 - 第一次个人项目【词频统计】——PSP表格
			
PSP2.1 任务内容 计划完成需要的时间(min) 实际完成需要的时间(min) Planning 计划 45 40 Estimate 估计这个任务需要多少时间,并规划大致工作步骤 30 20 De ...
 - Window API 第五篇 WTSEnumerateProcesses
			
这个函数可用来枚举系统进程,先来看定义: BOOL WTSEnumerateProcesses( _In_ HANDLE hServer, _In_ DWORD ...
 - 新手玩ubuntu(一)终端
			
有终端才能行天下事 点击为如下,就可以进行下面的开发了
 - python  urllib模块中的方法
			
1.urllib.urlopen(url[,data[,proxies]]) 打开一个url的方法,返回一个文件对象,然后可以进行类似文件对象的操作.本例试着打开google >>> ...
 - 第三章 Odoo 12 开发之创建第一个 Odoo 应用
			
Odoo 开发通常都需要创建自己的插件模块.本文中我们将通过创建第一个应用来一步步学习如何在 Odoo 中开启和安装这个插件.我们将从基础的开发流学起,即创建和安装新插件,然后在开发迭代中更新代码来进 ...