Druid(德鲁伊)数据池配置文件详解以及简单的实现

阿里巴巴的开源项目Druid数据池目前来讲还是很流行的,性能也比较好,接下来简单介绍一下它的几点优势

一. 亚秒级查询
druid提供了快速的聚合能力以及亚秒级的OLAP查询能力,多租户的设计,是面向用户分析应用的理想方式。
二.实时数据注入
druid支持流数据的注入,并提供了数据的事件驱动,保证在实时和离线环境下事件的实效性和统一性
三.可扩展的PB级存储
druid集群可以很方便的扩容到PB的数据量,每秒百万级别的数据注入。即便在加大数据规模的情况下,也能保证时其效性
四.多环境部署
druid既可以运行在商业的硬件上,也可以运行在云上。它可以从多种数据系统中注入数据,包括hadoop,spark,kafka,storm和samza等
五.丰富的社区
druid拥有丰富的社区,供大家学习

搭建Druid数据池,需要导入两个包

druid-1.1.5.jar mysql-connector-java-5.1.41-bin.jar

包导入完成后,是Druid的配置。有两种方式,一种是一步一步自己手动去配(硬编码),另一种是通过properties文件配置(软编码)。
这两种方式都可以配置Druid,但是第一种硬编码方式不够灵活,耦合性也高,如果日后我们需要修改配置信息,还需要重新编译,很麻烦,而如果我们选择第二种软编码方式,日后需求出现变动只需要修改这个配置文件便行,可维护性高,所以一般选择第二种,接下来先介绍第二种配置方式。
首先在src目录下新建一个druid.properties配置文件,然后在这个文件中封装配置信息,以下是配置内容详解

driverClassName=com.mysql.jdbc.Driver //驱动加载
url=jdbc:mysql://127.0.0.1:3306/student?characterEncoding=utf-8 //注册驱动
username=root //连接数据库的用户名
password=sjw58586 //连接数据库的密码。
filters=stat //属性类型的字符串,通过别名的方式配置扩展插件, 监控统计用的stat 日志用log4j 防御sql注入:wall
initialSize=2 //初始化时池中建立的物理连接个数。
maxActive=300 //最大的可活跃的连接池数量
maxWait=60000 //获取连接时最大等待时间,单位毫秒,超过连接就会失效。配置了maxWait之后,缺省启用公平锁,并发效率会有所下降, 如果需要可以通过配置useUnfairLock属性为true使用非公平锁。
timeBetweenEvictionRunsMillis=60000 // 连接回收器的运行周期时间,时间到了清理池中空闲的连接,testWhileIdle根据这个判断
minEvictableIdleTimeMillis=300000
validationQuery=SELECT 1 //用来检测连接是否有效的sql,要求是一个查询语句。
testWhileIdle=true //建议配置为true,不影响性能,并且保证安全性。 申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis, 执行validationQuery检测连接是否有效。
testOnBorrow=false //申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。设置为false
testOnReturn=false //归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能,设置为flase
poolPreparedStatements=false //是否缓存preparedStatement,也就是PSCache。
maxPoolPreparedStatementPerConnectionSize=200 // 池中能够缓冲的preparedStatements语句数量

配置时只需要按照上边注释以外的内容配置便可,这是我的配置文件信息
配置文件

注意:properties配置文件不能有空格,值不能有双引号,行不能写分号
配置文件配好之后,就可以开始初始化数据池子了

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;

import javax.sql.DataSource;

import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidDataSourceFactory;

public class DataSourceUtil {

    static DruidDataSource dSource = null;
    static Properties properties = new Properties();

    // 静态代码块初始化加载驱动
    static {
        // 通过类加载器来获得流
        InputStream is = DataSourceUtil.class.getClassLoader().getResourceAsStream("Druid.properties");
        try {
            // 通过流读取配置文件中的内容到集合中
            properties.load(is);
            // 通过Druid工厂加载文件注册驱动,初始化池子
            dSource = (DruidDataSource) DruidDataSourceFactory.createDataSource(properties);

        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        // 测试连接是否正常
        for (int i = 0; i < 50; i++) {
            try {
                // 从池中取出连接
                Connection conn = dSource.getConnection();
                System.out.println(conn.hashCode());
                // 使用完后将连接放入池中(close()是代理过的方法,并不是原生的colse)
                conn.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

第二种配置方式:

public class Demo1 {
    public static void main(String[] args) throws Exception{
        //创建连接池
        DruidDataSource ds=new DruidDataSource();
        //1基本参数4个
        ds.setDriverClassName("com.mysql.jdbc.Driver");
        ds.setUrl("jdbc:mysql://localhost:3306/school");
        ds.setUsername("root");
        ds.setPassword("root");

        //2其他配置
        //2.1设置初始大小
        ds.setInitialSize(20);
        //2.2设置最大大小
        ds.setMaxActive(50);
        //2.3设置最小空闲连接
        ds.setMinIdle(5);
        //2.4设置等待时间
        ds.setMaxWait(10000);

        // 测试连接是否正常
        for(int i=0;i<100;i++) {
            Connection conn=ds.getConnection();
            System.out.println(conn.getClass().getName()+"..."+i);
            conn.close();
        }       
    }
}   

ok,两种方式都完成了配置,最后都打印出了连接池中连接的hascode(),证明正确,如果有需要,还可以再加入一些sql语句查询数据库数据,扩展便可以。

  • 15
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Druid连接是一个开源的、高效的数据库连接池,适用于Java应用程序。它能够提供连接和管理连接的功能,帮助进行数据库连接的管理和优化。 Druid连接的配置主要包括以下几个方面: 1. 数据源配置:可以通过配置文件或代码来设置数据库相关的属性,如驱动类型、URL、用户名、密码等。这些配置项可以根据具体的数据库类型和环境需求来设置。 2. 连接参数配置:可以设置连接的一些基本参数,如初始化连接数、最小连接数、最大连接数等。这些参数会直接影响连接的性能和资源占用情况,需要根据具体应用的需求进行调整。 3. 连接属性配置:可以设置每个连接的一些属性,如连接超时时间、最大等待时间、是否自动提交等。这些属性可以根据具体需求进行设置,以满足应用程序的要求。 4. 监控配置:可以设置连接的监控功能,包括连接的活跃连接数、空闲连接数、执行SQL次数、慢查询次数等。这些监控数据可以通过配置项输出到日志文件或通过JMX暴露出来,以便进行监控和调优。 5. 连接扩展配置:可以通过配置项来设置连接的一些扩展功能,如连接的预处理、过滤器等。这些功能可以提供更灵活的连接管理方式,以满足特定需求。 通过合理配置Druid连接,可以提高应用程序对数据库连接的管理和利用效率,减少连接泄露和性能问题。但是需要注意的是,配置应遵循最佳实践,并根据实际情况进行调整和优化,以达到最佳的数据库连接池配置效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值