链接池的意义及阿里Druid

     创建数据库链接是至关耗时和耗费资源的,并且一个数据库服务器可以同时创建的链接数也是有限的,在大型的Web应用中,可能同时会有成百上千个访问数据库的请求,若是Web应用程序为每个客户请求分配一个数据库链接,将致使性能的急剧降低。为了可以重复利用数据库链接,提升对请求的响应时间和服务器的性能,能够采用链接池技术。链接池技术预先创建多个数据库链接对象,而后将链接对象保存到链接池中,当客户请求到来时,从池中取出一个链接对象为客户服务,当请求完成后,客户程序调用close()方法,将链接对象放回池中。

     在普通的数据库访问程序中,客户程序获得的链接对象是物理链接,调用链接对象的close()方法将关闭链接,而采用链接池技术,客户程序获得的链接对象是链接池中物理链接的一个句柄,调用链接对象的close()方法,物理链接并无关闭,数据源的实现只是删除了客户程序中的链接对象和池中的链接对象之间的联系。css

第一部分:数据源的集中比较。
html

目前经常使用的数据源主要有c3p0、dbcp、proxool、druid,先来讲说他们
Spring 推荐使用dbcp;
Hibernate 推荐使用c3p0和proxool
一、 DBCP:apache
DBCP(DataBase connection pool)数据库链接池。是apache上的一个 java链接池项目,也是 tomcat使用的链接池组件。单独使用dbcp须要3个包:common-dbcp.jar,common-pool.jar,common-collections.jar因为创建数据库链接是一个很是耗时耗资源的行为,因此经过链接池预先同数据库创建一些链接,放在内存中,应用程序须要创建数据库链接时直接到链接池中申请一个就行,用完后再放回去。dbcp没有自动的去回收空闲链接的功能。java

二、 C3P0:
C3P0是一个开源的jdbc链接池,它实现了数据源和jndi绑定,支持jdbc3规范和jdbc2的标准扩展。c3p0是异步操做的,缓慢的jdbc操做经过帮助进程完成。扩展这些操做能够有效的提高性能。目前使用它的开源项目有Hibernate,Spring等。c3p0有自动回收空闲链接功能。mysql

三、 Proxool:Sourceforge
Proxool是一种Java数据库链接池技术。是sourceforge下的一个开源项目,这个项目提供一个健壮、易用的链接池,最为关键的是这个链接池提供监控的功能,方便易用,便于发现链接泄漏的状况。
综合来讲,稳定性是dbcp>=c3p0>proxoolsql

后来阿里巴巴的druid开源了,能够是前无古人后无来者,最强没有之一,是否的稳定,在大并发中表现十分好数据库

今天来介绍的主要是监控,德鲁伊提供的这个监控组件,很是的便利,截图以下:apache

这是针对全部sql的监控,运行效率等等都能看到tomcat

对于url的监控,请求时间,并发等等,很是便利服务器

当前数据源的配置信息也可以看到session

监控session,这是我当前登陆的

 

总的来讲,这个数据源仍是不错的,很是推荐,现在也已经到了1.0.23版本

复制代码
<!-- 链接池 阿里巴巴数据源 全世界最牛逼的data source 没有之一 -->

<druid.version>1.0.23</druid.version>

            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>${druid.version}</version>
            </dependency>



第二部分:详讲在普通项目中的配置。

文章简介
Druid首先是一个数据库链接池,但它不只仅是一个数据库链接池,它还包含一个ProxyDriver,一系列内置的JDBC组件库,一个SQLParser。 Druid支持全部JDBC兼容的数据库,包括Oracle、MySql、Derby、Postgresql、SQLServer、H2等等。  
Druid针对Oracle和MySql作了特别优化,好比Oracle的PSCache内存占用优化,MySql的ping检测优化。 Druid在监控、可扩展性、稳定性和性能方面都有明显的优点。Druid提供了Filter-Chain模式的扩展API,能够本身编写Filter拦截JDBC中的任何方法,能够在上面作任何事情,好比说性能监控、SQL审计、用户名密码加密、日志等等。

配置   
为了方便你们迁移,Druid的配置和DBCP是基本一致的,若是你原来是使用DBCP,迁移是十分方便的,只须要把corg.apache.commons.dbcp.BasicDataSource修改成om.alibaba.druid.pool.DruidDataSource就行了。 
<beanid="dataSource" class="com.alibaba.druid.pool.DruidDataSource"init-method="init"destroy-method="close"> 
   <property name="url"value="${jdbc_url}" />
   <property name="username"value="${jdbc_user}" />
   <property name="password"value="${jdbc_password}" />
    
   <property name="filters"value="stat" />
 
   <property name="maxActive"value="20" />
   <property name="initialSize"value="1" />
   <property name="maxWait"value="60000" />
   <property name="minIdle"value="1" />
 
   <propertyname="timeBetweenEvictionRunsMillis" value="60000"/>
   <propertyname="minEvictableIdleTimeMillis" value="300000"/>
 
   <property name="validationQuery"value="SELECT 'x'" />
   <property name="testWhileIdle"value="true" />
   <property name="testOnBorrow"value="false" />
   <property name="testOnReturn"value="false" />
    
   <propertyname="poolPreparedStatements" value="true" />
   <propertyname="maxPoolPreparedStatementPerConnectionSize" value="50"/>
</bean>

在上面的配置中,一般你须要配置url、username、password,maxActive这三项。

第三部分druid的使用

1:添加maven依赖

<dependency>

<groupId>com.alibaba</groupId>

<artifactId>druid</artifactId>

<version>1.0.18</version>

</dependency>

<dependency>

<groupId>mysql</groupId>

<artifactId>mysql-connector-java</artifactId>

<version>5.1.38</version>

</dependency>

2:添加一个资源配置文件(建议)

    driver=com.mysql.jdbc.Driver

url=jdbc:mysql:///wangjian?characterEncoding=UTF-8&autoReconnect=true

username=root

password=1234

#最大链接数

maxActive=3

3:建立工厂类读取资源文件并建立javax.sql.DataSource的实例

    须要先声明DruidDataSoure设置链接信息,其后再赋值给javax.sql.DataSource。完整代码以下:

Properties prop = new Properties();

prop.load(DSUtils.class.getResourceAsStream("pwd.properties"));

String driver = prop.getProperty("driver");

String url = prop.getProperty("url");

String username =prop.getProperty("username");

String password = prop.getProperty("password");

String maxActive = prop.getProperty("maxActive");

//声明DruidDataSource

DruidDataSource ds = new DruidDataSource();

ds.setDriverClassName(driver);

ds.setUrl(url);

ds.setUsername(username);

ds.setPassword(password);

ds.setMaxActive(Integer.parseInt(maxActive));

相信小伙伴位,在建立DruidDataSource之后,以然已经会使用了吧。哈哈~

4:对密码进行加密之后再保存到资源文件中并配置

因为在资源文件中,配置了数据库明文密码,为了保护密码,可使用Druid数据源密码加密的功能。

4.一、首先对密码进行加密获取一个publickey和加密后的密码

执行如下命令:

 C:/>java –cp druid-1.0.18.jar com.alibaba.druid.filter.config.ConfigTools 密码

上面的命令中,蓝线部分为随机生成的publickey,每次随机。红线中的为生成的密码。

4.二、将publickey和密码配置到资源文件中

生成密码的命令:java -cp druid-1.0.18.jar com.alibaba.druid.filter.config.ConfigTools e234

driver=com.mysql.jdbc.Driver

url=jdbc:mysql:///wangjian?characterEncoding=UTF-8&autoReconnect=true&useSSL=false

username=root

#通过加密之后的密码

password=XSY9axcew83ZVNeZUmgrOPXwP0d3ZziFmqal4IZPAAJ4mpnwbouWiUaqD…

#最大链接数

maxActive=3

#生成的公钥

publicKey=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBANTxMV9TZYKpQCm7E+mEOhW0…

4.三、修改DruidDataSource实例化过程以下

主要是添加publickey和通过加密的密码,并指定过虑器:

//读取资源文件

Properties prop = new Properties();

prop.load(DSUtils.class.getResourceAsStream("pwd.properties"));

String driver = prop.getProperty("driver");

String url = prop.getProperty("url");

String username =prop.getProperty("username");

String password = prop.getProperty("password");

String maxActive = prop.getProperty("maxActive");

String publickey = prop.getProperty("publickey");

//声明DruidDataSource

DruidDataSource ds = new DruidDataSource();

ds.setDriverClassName(driver);

ds.setUrl(url);

ds.setUsername(username);

ds.setPassword(password);

ds.setMaxActive(Integer.parseInt(maxActive));

//config:使用ConfigFilter解密,Stat:启动监控功能StatFilter

ds.setFilters("config,stat");

//设置解密使用的publickey

ds.setConnectionProperties("config.decrypt=true;config.decrypt.key="+publickey);

 

5:配置监功能查看Druid数据源的监控信息

配置Druid用于监控的Servlet以下:

<servlet>

<servlet-name>DruidStatView</servlet-name>

<servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>DruidStatView</servlet-name>

<url-pattern>/druid/*</url-pattern>

</servlet-mapping>

总结:

   1:Druid数据源用维护链接对象是DruidDataSource 。

   2:能够经过ConfigTools对用户的密码进行加密。

   3:能够经过配置的方式,监控SQL执行。

转载:https://blog.csdn.net/yanguo110/article/details/68944659

相关文章
相关标签/搜索