Druid(德鲁伊)数据池配置⽂件详解以及简单的实现
阿⾥巴巴的开源项⽬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配置⽂件,然后在这个⽂件中封装配置信息,以下是配置内容详解
sql.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 = ClassLoader().getResourceAsStream("Druid.properties");
try {
// 通过流读取配置⽂件中的内容到集合中
properties.load(is);
// 通过Druid⼯⼚加载⽂件注册驱动,初始化池⼦
dSource = (DruidDataSource) ateDataSource(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 = Connection();
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("sql.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 Connection();
System.out.Class().getName()+"..."+i);
conn.close();
}
}
}
ok,两种⽅式都完成了配置,最后都打印出了连接池中连接的hascode(),证明正确,如果有需要,还可以再加⼊⼀些sql语句查询数据库数据,扩展便可以。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论