zoukankan      html  css  js  c++  java
  • (转)阿里巴巴Druid数据源及使用

    原文链接:https://blog.csdn.net/yanguo110/article/details/68944659

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

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

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

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

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

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

    这是针对所有sql的监控,运行效率等等都能看到

    对于url的监控,请求时间,并发等等,非常便利

    当前数据源的配置信息也能够看到

    监控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.1、首先对密码进行加密获取一个publickey和加密后的密码

    执行以下命令:

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

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

    4.2、将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.3、修改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执行。

  • 相关阅读:
    CAN总线学习资料
    VMware虚拟机 硬盘空间不足 磁盘大小调整方案
    郭天祥-S3C2440开发板Linux2.6.31移植教程
    MFC串口编程——使用标准SerialCom类
    Luogu P2602 [ZJOI2010]数字计数 //数位DP
    luogu P1896 [SCOI2005] 互不侵犯 //状压DP
    中北大学ACM 5/12 T6 CSY的幸福
    P2473 || SCOI2008 奖励关 //状压&&期望DP
    请让蝴蝶爬满全身
    【图论】二分图 // 未完成 =、=
  • 原文地址:https://www.cnblogs.com/MMSJ6/p/9075630.html
Copyright © 2011-2022 走看看