说到连接池,最常见的就是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的更多相关文章

  1. Druid连接池初探

    Druid首先是一个数据库连接池,但它不仅仅是一个数据库连接池,它还包含一个ProxyDriver,一系列内置的JDBC组件库,一个SQL Parser. Maven配置 在pom.xml文件中添加如 ...

  2. 初探领域驱动设计(2)Repository在DDD中的应用

    概述 上一篇我们算是粗略的介绍了一下DDD,我们提到了实体.值类型和领域服务,也稍微讲到了DDD中的分层结构.但这只能算是一个很简单的介绍,并且我们在上篇的末尾还留下了一些问题,其中大家讨论比较多的, ...

  3. CSharpGL(8)使用3D纹理渲染体数据 (Volume Rendering) 初探

    CSharpGL(8)使用3D纹理渲染体数据 (Volume Rendering) 初探 2016-08-13 由于CSharpGL一直在更新,现在这个教程已经不适用最新的代码了.CSharpGL源码 ...

  4. 从273二手车的M站点初探js模块化编程

    前言 这几天在看273M站点时被他们的页面交互方式所吸引,他们的首页是采用三次加载+分页的方式.也就说分为大分页和小分页两种交互.大分页就是通过分页按钮来操作,小分页是通过下拉(向下滑动)时异步加载数 ...

  5. JavaScript学习(一) —— 环境搭建与JavaScript初探

    1.开发环境搭建 本系列教程的开发工具,我们采用HBuilder. 可以去网上下载最新的版本,然后解压一下就能直接用了.学习JavaScript,环境搭建是非常简单的,或者说,只要你有一个浏览器,一个 ...

  6. .NET文件并发与RabbitMQ(初探RabbitMQ)

    本文版权归博客园和作者吴双本人共同所有.欢迎转载,转载和爬虫请注明原文地址:http://www.cnblogs.com/tdws/p/5860668.html 想必MQ这两个字母对于各位前辈们和老司 ...

  7. React Native初探

    前言 很久之前就想研究React Native了,但是一直没有落地的机会,我一直认为一个技术要有落地的场景才有研究的意义,刚好最近迎来了新的APP,在可控的范围内,我们可以在上面做任何想做的事情. P ...

  8. Spring + SpringMVC + Druid + MyBatis 给你一个灵活的后端解决方案

    生命不息,折腾不止. 折腾能遇到很多坑,填坑我理解为成长. 两个月前自己倒腾了一套用开源框架构建的 JavaWeb 后端解决方案. Spring + SpringMVC + Druid + JPA(H ...

  9. Spring + SpringMVC + Druid + JPA(Hibernate impl) 给你一个稳妥的后端解决方案

    最近手头的工作不太繁重,自己试着倒腾了一套用开源框架组建的 JavaWeb 后端解决方案. 感觉还不错的样子,但实践和项目实战还是有很大的落差,这里只做抛砖引玉之用. 项目 git 地址:https: ...

随机推荐

  1. MYSQL常用命令(转)

    1.导出整个数据库mysqldump -u 用户名 -p --default-character-set=latin1 数据库名 > 导出的文件名(数据库默认编码是latin1)mysqldum ...

  2. neo4j 实战、实例、示例 创建电影关系图 -1

    1. 创建关系 因为代码占篇幅太大,创建整个"电源关系图"的代码在文章最下方. 2. 简单分析创建语句 2.1 创建电影节点 CREATE (TheMatrix:Movie {ti ...

  3. docker中使用源码方式搭建SRS流媒体服务

    一.背景 搭建流媒体服务的方式一般会采用nginx+rtmp和srs服务两种,前者是nginx加上插件所用,而后者是专门为了为了流媒体而生,在这一节中我们将从头搭建srs流媒体服务 二. 运行环境 为 ...

  4. Hibernate调用Oracle的存储过程

    众所周知,当过多的使用存储过程,触发器等 数据库方言相关的应用时,应用程序的移植性会变差,特别是在Hibernate中使用这些,简直是讽刺,但是当今中国又有哪家公司做项目会关心应用程序的移植性呢? 现 ...

  5. C语言开发系列-二进制

    n位二进制的取值范围 -2的n-1次方 ~ 2的n-1次方-1 输出一个整数的二进制的存储形式 #include <stdio.h> // 输出一个整数的二进制的存储形式 void put ...

  6. 第一次个人项目【词频统计】——PSP表格

    PSP2.1 任务内容 计划完成需要的时间(min) 实际完成需要的时间(min) Planning 计划 45 40 Estimate 估计这个任务需要多少时间,并规划大致工作步骤 30 20 De ...

  7. Window API 第五篇 WTSEnumerateProcesses

    这个函数可用来枚举系统进程,先来看定义: BOOL WTSEnumerateProcesses( _In_  HANDLE            hServer, _In_  DWORD        ...

  8. 新手玩ubuntu(一)终端

    有终端才能行天下事 点击为如下,就可以进行下面的开发了

  9. python urllib模块中的方法

    1.urllib.urlopen(url[,data[,proxies]]) 打开一个url的方法,返回一个文件对象,然后可以进行类似文件对象的操作.本例试着打开google >>> ...

  10. 第三章 Odoo 12 开发之创建第一个 Odoo 应用

    Odoo 开发通常都需要创建自己的插件模块.本文中我们将通过创建第一个应用来一步步学习如何在 Odoo 中开启和安装这个插件.我们将从基础的开发流学起,即创建和安装新插件,然后在开发迭代中更新代码来进 ...